【发布时间】:2017-09-22 12:36:22
【问题描述】:
我正面临 CPU 使用率过高的问题,并发 create temporary table 语句是否会导致 CPU 使用率过高?
是否有任何查询通过我们可以捕获导致 CPU 使用率高的查询?
我们设置的变量:-
tmp_table_size = 1G
max_heap_table_size = 1G
innodb_buffer_pool_size = 145 G
innodb_buffer_pool_instance = 8
innodb_page_cleaner = 8
状态变量:-
mysql> show global status like '%tmp%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| Created_tmp_disk_tables | 60844516 |
| Created_tmp_files | 135751 |
| Created_tmp_tables | 107643364 |
+-------------------------+-----------+
mysql> show global status like '%innodb_buffer%';
+---------------------------------------+--------------------------------------------------+
| Variable_name | Value |
+---------------------------------------+--------------------------------------------------+
| Innodb_buffer_pool_dump_status | Dumping of buffer pool not started |
| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 170917 19:11:45 |
| Innodb_buffer_pool_resize_status | |
| Innodb_buffer_pool_pages_data | 8935464 |
| Innodb_buffer_pool_bytes_data | 146398642176 |
| Innodb_buffer_pool_pages_dirty | 18824 |
| Innodb_buffer_pool_bytes_dirty | 308412416 |
| Innodb_buffer_pool_pages_flushed | 122454921 |
| Innodb_buffer_pool_pages_free | 188279 |
| Innodb_buffer_pool_pages_misc | 377817 |
| Innodb_buffer_pool_pages_total | 9501560 |
| Innodb_buffer_pool_read_ahead_rnd | 0 |
| Innodb_buffer_pool_read_ahead | 585245 |
| Innodb_buffer_pool_read_ahead_evicted | 14383 |
| Innodb_buffer_pool_read_requests | 304878851665 |
| Innodb_buffer_pool_reads | 10537188 |
| Innodb_buffer_pool_wait_free | 0 |
| Innodb_buffer_pool_write_requests | 14749510186 |
+---------------------------------------+--------------------------------------------------+
【问题讨论】:
-
Created_tmp_tables 确实可能导致 CPU 使用率很高.. 但这个问题应该在dba.stackexchange.com
-
您可以重新编程您的 (php) 代码,以便在查询之前和之后触发
show session status like '%tmp%',然后如果您记录查询和状态,您可以找出创建临时表所需的查询。 . 你最有可能想要优化这些 qeuries。 -
让我们退一步来看一个常见的查询。几乎总是“高 CPU”是由低效的查询引起的——索引不佳、查询的表述不佳等。大量的 tmp 表本身并不是邪恶的。在不知道
Uptime的情况下,那些计数器毫无用处。另外,你有TEXT列吗?
标签: mysql performance amazon-web-services innodb amazon-rds