Mysql InnoDB表大小性能

Mysql InnoDB表大小性能

我有一张接近 200 万条记录的表。该表存储了交易历史记录。这是一个高流量网站,但该表的访问频率也不高。目前,由于这张表,我们的查询速度没有变慢,但我正在考虑何时需要将数据从这张表迁移到数据存档方法。

该服务器是亚马逊 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

几个问题:

  • 在什么时候我会开始看到由于该表中的记录数量而导致的性能下降?

  • 我应该通过 SHOW INNODB STATUS 在 mysql 服务器上以及在表本身上(即行格式)检查哪些设置,以确保我根据需要最大化性能?

  • 我应该收集哪些指标来计算一段时间内的表现?

答案1

问题太多了!!首先,如果您开始引发全表扫描或创建临时表的连接,您可能会开始注意到性能问题。您可以通过查看查询的 EXPLAIN 输出来跟踪此问题。以下是有关 EXPLAIN 的一些信息:

http://weevilgenius.net/2010/09/mysql-explain-reference/

对于设置,理想情况下,如果您可以将整个数据库放入内存中,那就太好了。以下是可能最有助于调整的变量:

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

相关内容