我有一张接近200万条logging的表格。 该表存储交易历史。 这是一个高stream量的网站,但也没有定期访问表。 由于这个表,我们目前没有缓慢的查询,但是我期望什么时候需要将数据从这个表迁移到数据存档方法。
该服务器是一个亚马逊EC2高CPU媒体盒。
High-CPU Medium Instance 1.7 GB of memory 5 EC2 Compute Units (2 virtual cores with 2.5 EC2 Compute Units each) 350 GB of instance storage 32-bit platform I/O Performance: Moderate API name: c1.medium Engine: InnoDB Version: 10 Row_format: Compact Rows: 1677878 Avg_row_length: 71 Data_length: 120209408 Max_data_length: 0 Index_length: 246497280 Data_free: 0 Auto_increment: 1914179 Create_time: 2011-08-07 20:15:29 Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: Comment: InnoDB free: 7168 kB
几个问题:
由于本表中的logging数量,我可能会开始看到性能下降?
我应该通过SHOW INNODB STATUS和表本身(即行格式)来检查mysql服务器上的哪些设置,以确保我根据需要最大化性能?
我应该收集哪些指标来计算性能随着时间的推移?
这么多的问题!! 首先,如果您开始引起全表扫描或创build临时表的连接,您可能会注意到性能问题。 你可以通过查看你的查询的EXPLAIN输出来跟踪这个。 这里是关于EXPLAIN的一些信息:
http://weevilgenius.net/2010/09/mysql-explain-reference/
对于这些设置,理想情况下,如果您可以将整个数据库放入内存中,那就太好了。 以下是可能对调整最有帮助的variables:
innodb_buffer_pool_size=8192M innodb_additional_mem_pool_size=512M innodb_log_buffer_size=8M innodb_flush_method = O_DIRECT key_buffer_size=4096M read_buffer_size=1M read_rnd_buffer_size=10M sort_buffer_size=1M join_buffer_size=1M tmp_table_size=32M
你会希望使这些大部分都合理(你会想要研究其中的一些,因为一些是每个连接,一些是全球的)。 你提到SHOW INNODB STATUS是一个很好的开始,尝试看看这些领域:
-------- FILE I/O -------- Pending normal aio reads: 0, aio writes: 0, ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0 Pending flushes (fsync) log: 0; buffer pool: 0 28889 OS file reads, 52982178 OS file writes, 35063424 OS fsyncs 0.00 reads/s, 0 avg bytes/read, 2.67 writes/s, 2.67 fsyncs/s
这些应该会告诉你,如果你被某个地方的IO绑定。 然后检查:
---------------------- BUFFER POOL AND MEMORY ---------------------- Free buffers 342668
确保你有空闲的缓冲区。
关于你最后一个要监控的问题,还有更好的。 我使用OpenNMS来监视我们的MySQL服务器性能。 以下是我们目前趋势/重大变化的事情:
EventCount Uptime Bytes_received Bytes_sent Com_delete Com_delete_multi Com_insert Com_insert_select Com_select Com_stmt_execute Com_update Com_update_multi Created_tmp_disk_tables Created_tmp_tables key_buffer_size key_cache_block_size Key_blocks_unused Key_read_requests Key_reads Key_write_requests Key_writes Open_files Open_tables table_open_cache Questions Slow_queries Connections Threads_created Threads_cached Threads_connected Threads_running