MySQL 5.7简单计数查询有时快,有时慢 【1】 下面是一个简单的计数查询:
【2】 查询结果:MySQL 5.7简单计数查询有时快,有时慢 【1】 下面是一个简单的计数查询:,mysql,performance,count,Mysql,Performance,Count,【2】 查询结果: +----------+ | count(*) | +----------+ | 1021863 | +----------+ 1 row in set, 1 warning (34.77 sec) 【3】 有时是(大多数时候): 【4】 几分钟后,它变得非常缓慢,就像第一个结果显示。 【5】 查询将使用以下索引,uk_customer包含“每月”列: +----+-------------+----------------------+------------+-----
+----------+
| count(*) |
+----------+
| 1021863 |
+----------+
1 row in set, 1 warning (34.77 sec)
【3】 有时是(大多数时候):
【4】 几分钟后,它变得非常缓慢,就像第一个结果显示。
【5】 查询将使用以下索引,uk_customer包含“每月”列:
+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
| 1 | SIMPLE | fees | NULL | ref | uk_warehouse,uk,uk_calcu | uk_customer | 4 | const | 2028586 | 10.00 | Using where |
+----+-------------+----------------------+------------+------+--------------------------------------------+----------------+---------+-------+---------+----------+-------------+
1 row in set, 2 warnings (0.00 sec)
=======================================================================
【6】 服务器内存为5G,缓冲池大小为4G。以及索引大小:
【7】 innodb设置如下所示:
当前缓冲区使用情况:
+---------------------------------------+---------------+
| Variable_name | Value |
+---------------------------------------+---------------+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 753136482 |
| Innodb_buffer_pool_read_ahead_evicted | 185375 |
| Innodb_buffer_pool_read_requests | 1355375133341 |
| Innodb_buffer_pool_reads | 2418853408 |
+---------------------------------------+---------------+
5 rows in set (0.00 sec)
页面使用:
+----------------------------------+----------+
| Variable_name | Value |
+----------------------------------+----------+
| Innodb_buffer_pool_pages_data | 246447 |
| Innodb_buffer_pool_pages_dirty | 2738 |
| Innodb_buffer_pool_pages_flushed | 84827986 |
| Innodb_buffer_pool_pages_free | 3982 |
| Innodb_buffer_pool_pages_misc | 11699 |
| Innodb_buffer_pool_pages_total | 262128 |
+----------------------------------+----------+
6 rows in set (0.00 sec)
=======================================================================
【8】 但它在从属服务器上运行良好,速度非常快,几乎都是2秒以上
请帮助,如何调整性能?这就是“缓存”的效果。InnoDB基本上有一个主缓存“buffer\u pool”,其大小由InnoDB\u buffer\u pool\u size
控制。总数据集有多大
进一步详情:
- 不要运行“大”查询。计算一百万行可能需要100MB的缓存。我说不出第三项的大问题是什么
- 更好的索引。对于这一个查询,
是最佳的,需要的数据更少,从而加快了非缓存(35s)版本的速度。此外,由于数据较小,其从缓存中跳出的可能性较小索引(flag,bmmonth)
- 避免交换。5GB内存中的4GB缓冲池可能导致交换。这对MySQL的性能非常糟糕。我强烈建议您将缓冲池大小降低到3G
- 更多的RAM(和更大的缓冲池)
- 找到其他“大”查询,并努力减少数据的使用
- 质疑是否需要一个100万左右的准确数字。这涉及到用户界面的更改,可能还涉及到“估计”计数的方法
- 汇总表——每晚统计前一天发生的事件;将其保存在汇总表中,并对其运行更快的查询。(我可以进一步讨论这个问题。)
+----------------------+--------+
|变量名称|值|
+----------------------+--------+
|读取缓冲区大小131072|
|读取缓冲区大小131072|
+----------------------+--------+
cat/proc/cpuinfo | grep“物理id”| sort | uniq | wc-l
1.
cat/proc/cpuinfo | grep“处理器”| sort | uniq | wc-l
4.
服务器内存:
自由-m
缓存的可用共享缓冲区总数
成员:80017864 136 0 145 2188
-/+缓冲区/高速缓存:5530 2470
掉期:0
mysqld使用的内存:
PID用户PR NI VIRT RES SHR S%CPU%MEM TIME+命令
10920 mysql 20 0 6999m 5.1g 7292 S 48.9 65.6 53260:31 mysqld
@Wilson Hauck
创建表格的结果如下所示:
创建表格:创建表格费用(
id bigint(20)无符号非空自动增量注释“已删除”,
uid bigint(20)不为空默认值“0”注释“已删除”,
b月整数(11)非空默认值“201501”注释“已删除”,
bno varchar(32)默认“”注释“已删除”,
费用\u no varchar(32)不为空默认“”注释“已删除”,
cur_time datetime默认空注释“已删除”,
cusid varchar(32)默认“”注释“已删除”,
cusname varchar(32)默认“”注释“已删除”,
wcode varchar(32)默认“”注释“已删除”,
wname varchar(32)默认“”注释“已删除”,
product_id varchar(32)默认“”注释“已删除”,
产品名称varchar(300)默认“”注释“已删除”,
splace_code varchar(32)默认“”注释“已删除”,
splace varchar(32)默认“”注释“已删除”,
批次代码varchar(32)默认“”注释“已删除”,
产品日期时间戳空默认空注释“已删除”,
到期日默认空注释“已删除”,
in_time Stamp NULL默认空注释“已删除”,
温度类型varchar(4)默认“”注释“已删除”,
温度名称varchar(4)默认“”注释“已删除”,
总重量十进制(16,6)默认值“0.000000”注释“已删除”,
总量十进制(16,6)默认值“0.000000”注释“已删除”,
总数量十进制(16,6)默认值“0.000000”注释“已删除”,
主题代码varchar(32)默认“”注释“已删除”,
subject_name varchar(32)默认“”注释“已删除”,
charge_unit varchar(32)默认“”注释“已删除”,
费用单位类型varchar(32)默认“”注释“已删除”,
charge_num decimal(16,6)默认值“0.000000”注释“已删除”,
金额小数(16,6)默认值“0.000000”注释“已删除”,
减额金额小数(16,6)默认值“0.000000”注释“已删除”,
折扣金额十进制(16,6)默认值“0.000000”注释“已删除”,
规则\u无varchar(32)默认“”命令
+--------------------------------------------------+---------------------------+------------+--------------+
| Table_Name | Index_Name | Page_Count | Size_in_MB |
+--------------------------------------------------+---------------------------+------------+--------------+
| `test`.`fees` | PRIMARY | 46503 | 567.04021835 |
| `test`.`fees` | uk_customer | 2521 | 34.86496449 |
| `test`.`fees` | uk_calcu | 3178 | 30.72235107 |
innodb_page_size = 16384
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 2
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2048
innodb_lock_wait_timeout = 5
lock_wait_timeout=5
innodb_io_capacity = 1000
innodb_io_capacity_max = 6000
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
#innodb_undo_logs = 128
innodb_undo_tablespaces = 2
innodb_flush_neighbors = 0
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16777216
#innodb_max_undo_log_size = 2147483648
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 16
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 256k
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_file_per_table = 1
+---------------------------------------+---------------+
| Variable_name | Value |
+---------------------------------------+---------------+
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 753136482 |
| Innodb_buffer_pool_read_ahead_evicted | 185375 |
| Innodb_buffer_pool_read_requests | 1355375133341 |
| Innodb_buffer_pool_reads | 2418853408 |
+---------------------------------------+---------------+
5 rows in set (0.00 sec)
+----------------------------------+----------+
| Variable_name | Value |
+----------------------------------+----------+
| Innodb_buffer_pool_pages_data | 246447 |
| Innodb_buffer_pool_pages_dirty | 2738 |
| Innodb_buffer_pool_pages_flushed | 84827986 |
| Innodb_buffer_pool_pages_free | 3982 |
| Innodb_buffer_pool_pages_misc | 11699 |
| Innodb_buffer_pool_pages_total | 262128 |
+----------------------------------+----------+
6 rows in set (0.00 sec)