可能使mysql更快

时间:2019-05-02 19:24:42

标签: mysql linux

每5分钟处理300万行数据。

数据流:从网络到tmp表的LoadData。 进行某种分组并保存到约10个不同的表。 最多运行7个会话,用于同时将数据保存到不同的表中。

我累了。

  1. 使用/ etc / fstab创建100GB的存储磁盘。 [tmpfs / mnt / ramDisk tmpfs size = 100G 0 0]并链接到我的数据库目录。使速度提高30%。
  2. 使用'/ etc / fstab'创建50GB的存储磁盘,用于tmpdir。这将使数据库速度提高15%。
  3. 每个表可能有100M行,每5分钟插入1M行。 我尝试了Innodb。似乎一个插入永远不会结束。所以我对所有表使用MYISAM。通常在30秒内完成。
  4. 对于Mysql内存引擎是固定长度的,我有一些varchar(256)列,因此我在内存磁盘中使用MYISAM表。与内存引擎相比,仅使用1/4内存空间。
  5. MySQL配置
    • datadir=/data/MySQL
    • tmpdir = /mnt/sqlTmp
    • socket=/var/lib/mysql/mysql.sock
    • symbolic-links=0
    • log-error=/var/log/mysqld.log
    • pid-file=/var/run/mysqld/mysqld.pid
    • tmp_table_size=20G
    • max_heap_table_size=20G
    • max_connections = 20
    • key_buffer_size = 1G
    • sort_buffer_size = 2M
    • sql-mode = "NO_ZERO_IN_DATE"
    • secure-file-priv=""
    • innodb_buffer_pool_size = 1M
    • innodb_max_undo_log_size = 1M
    • innodb_log_file_size = 1M
    • innodb_flush_log_at_trx_commit = 0
    • character-set-client-handshake = FALSE
    • character-set-server = latin1
    • collation-server = latin1_bin
  6. CPU:E5-2620 2.1GHz * 32核心RAM:164GB磁盘:Raid10 10TB Mysql 5.7.26
  7. 显示进程列表
    • 用户睡眠SET @null = SLEEP(2)
    • 打开表格SET @ret = sys_exec(...
    • 创建排序索引INSERT t_sav_day_hst(...
    • 创建排序索引INSERT t_sav_day_uri(...
    • 用户睡眠SET @null = SLEEP(2)
    • 创建排序索引INSERT t_sav_rls_ip_hst(...
    • 发送数据INSERT t_sav_rls_fgt_hst(...
    • 发送数据INSERT t_sav_rls_pv_pv(...
    • 发送数据REPLACE t_sav_dtl_eml(...
    • 执行LOAD DATA INFILE ...
  8. 内存中仍有空间,甚至没有用作缓存。用htop检查。
  9. 我将所有内容都放在内存中,因此没有磁盘I / O流量。我看了一眼。
  10. 在处理过程中不会发生表锁定,我安排得很好。
  11. 大多数sql在重复的1M数据上插入到具有40M行的表中。

我的问题。我同时运行max 7 sql查询。但是如果我同时运行较少的查询。每个查询运行得更快。瓶颈是什么。我怎样才能使其运行更快? (所有表都在内存中,mysql tmpdir在内存中,没有表锁)

0 个答案:

没有答案