我正在寻找一些有MySQL专业知识的人的帮助。我不需要一个确切的解决方案 - 只是一些想法和地点寻找优化。为什么在写入300KB/sec时,I/O会写入MySQL?
有关该问题的一点点:
- 我需要插入大量的行成一个InnoDB表。
- 每个表只有一个索引(也是主键)
- 每行有大约1KB的数据。
- 我一次使用大约5000行的Load Data INFILE查询。
- 我正在使用8个线程写入(每个写入单独的数据)。
好吧,有了这些特性,我得到的每小时写入数据库的吞吐量约为100万行。这是大约1 GB的数据或〜300KB /秒,基于连续多少数据的高端。但是,当我看着我的机器统计数据时,我注意到磁盘写入的I/O图大致以每秒20 MB的速度写入,这表明我是I/O限制。 (CPU图也发射到100%,但约90%是iowait)。所以,我的问题是,为什么MySQL将约20 MB /秒的数据写入磁盘,通过查询发送的数据量约为5 KB /秒。
我猜测这种差异是由于日志文件,临时表和事务倍增 - 但我想知道为什么这个比率接近100:1?如何将这个比例缩小到更合理的东西?什么样的内部变量导致MYSQL向磁盘写出如此多的数据而不是将其存储在内存中?例如,我已经设置了innodb_buffer_pool_size = 12G,max_heap_table_size = 8G和tmp_table_size = 6G,试图让MySQL使用更多的内存而不是磁盘 - 但仍然是相同的结果。
我很感谢您给我的任何帮助和建议!
请参阅以下内容http://stackoverflow.com/questions/2463602/mysql-load-data-infile-acceleration/2504211#2504211 –
这是一个更好的问题[DBA SA](http:// dba。 stackexchange.com/)或[Serverfault](http://serverfault.com)? –
DBA.SE可能是一个更好的地方。其用户群似乎在增长。 – Bruno