视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
分析Mysql表读写、索引等操作的sql语句效率优化问题
2020-11-09 20:22:18 责编:小采
文档

上次我们说到mysql的一些sql查询方面的优化,包括查看explain执行计划,分析索引等等。今天我们分享一些 分析mysql表读写、索引等等操作的sql语句。

闲话不多说,直接上代码:

反映表的读写压力

SELECT file_name AS file,
 count_read,
 sum_number_of_bytes_read AS total_read,
 count_write,
 sum_number_of_bytes_write AS total_written,
 (sum_number_of_bytes_read + sum_number_of_bytes_write) AS total
 FROM performance_schema.file_summary_by_instance
ORDER BY sum_number_of_bytes_read+ sum_number_of_bytes_write DESC;

反映文件的延迟

SELECT (file_name) AS file,
 count_star AS total,
 CONCAT(ROUND(sum_timer_wait / 3600000000000000, 2), 'h') AS total_latency,
 count_read,
 CONCAT(ROUND(sum_timer_read / 1000000000000, 2), 's') AS read_latency,
 count_write,
 CONCAT(ROUND(sum_timer_write / 3600000000000000, 2), 'h')AS write_latency
 FROM performance_schema.file_summary_by_instance
ORDER BY sum_timer_wait DESC;

table 的读写延迟

SELECT object_schema AS table_schema,
 object_name AS table_name,
 count_star AS total,
 CONCAT(ROUND(sum_timer_wait / 3600000000000000, 2), 'h') as total_latency,
 CONCAT(ROUND((sum_timer_wait / count_star) / 1000000, 2), 'us') AS avg_latency,
 CONCAT(ROUND(max_timer_wait / 1000000000, 2), 'ms') AS max_latency
 FROM performance_schema.objects_summary_global_by_type
 ORDER BY sum_timer_wait DESC;

查看表操作频度

SELECT object_schema AS table_schema,
 object_name AS table_name,
 count_star AS rows_io_total,
 count_read AS rows_read,
 count_write AS rows_write,
 count_fetch AS rows_fetchs,
 count_insert AS rows_inserts,
 count_update AS rows_updates,
 count_delete AS rows_deletes,
 CONCAT(ROUND(sum_timer_fetch / 3600000000000000, 2), 'h') AS fetch_latency,
 CONCAT(ROUND(sum_timer_insert / 3600000000000000, 2), 'h') AS insert_latency,
 CONCAT(ROUND(sum_timer_update / 3600000000000000, 2), 'h') AS update_latency,
 CONCAT(ROUND(sum_timer_delete / 3600000000000000, 2), 'h') AS delete_latency
 FROM performance_schema.table_io_waits_summary_by_table
 ORDER BY sum_timer_wait DESC ;

索引状况

SELECT OBJECT_SCHEMA AS table_schema,
 OBJECT_NAME AS table_name,
 INDEX_NAME as index_name,
 COUNT_FETCH AS rows_fetched,
 CONCAT(ROUND(SUM_TIMER_FETCH / 3600000000000000, 2), 'h') AS select_latency,
 COUNT_INSERT AS rows_inserted,
 CONCAT(ROUND(SUM_TIMER_INSERT / 3600000000000000, 2), 'h') AS insert_latency,
 COUNT_UPDATE AS rows_updated,
 CONCAT(ROUND(SUM_TIMER_UPDATE / 3600000000000000, 2), 'h') AS update_latency,
 COUNT_DELETE AS rows_deleted,
 CONCAT(ROUND(SUM_TIMER_DELETE / 3600000000000000, 2), 'h')AS delete_latency
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
ORDER BY sum_timer_wait DESC;

全表扫描情况

SELECT object_schema,
 object_name,
 count_read AS rows_full_scanned
 FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NULL
 AND count_read > 0
ORDER BY count_read DESC;

没有使用的index

SELECT object_schema,
 object_name,
 index_name
 FROM performance_schema.table_io_waits_summary_by_index_usage
 WHERE index_name IS NOT NULL
 AND count_star = 0
 AND object_schema not in ('mysql','v_monitor')
 AND index_name <> 'PRIMARY'
 ORDER BY object_schema, object_name;

糟糕的sql问题摘要

SELECT (DIGEST_TEXT) AS query,
 SCHEMA_NAME AS db,
 IF(SUM_NO_GOOD_INDEX_USED > 0 OR SUM_NO_INDEX_USED > 0, '*', '') AS full_scan,
 COUNT_STAR AS exec_count,
 SUM_ERRORS AS err_count,
 SUM_WARNINGS AS warn_count,
 (SUM_TIMER_WAIT) AS total_latency,
 (MAX_TIMER_WAIT) AS max_latency,
 (AVG_TIMER_WAIT) AS avg_latency,
 (SUM_LOCK_TIME) AS lock_latency,
 format(SUM_ROWS_SENT,0) AS rows_sent,
 ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg,
 SUM_ROWS_EXAMINED AS rows_examined,
 ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg,
 SUM_CREATED_TMP_TABLES AS tmp_tables,
 SUM_CREATED_TMP_DISK_TABLES AS tmp_disk_tables,
 SUM_SORT_ROWS AS rows_sorted,
 SUM_SORT_MERGE_PASSES AS sort_merge_passes,
 DIGEST AS digest,
 FIRST_SEEN AS first_seen,
 LAST_SEEN as last_seen
 FROM performance_schema.events_statements_summary_by_digest d
where d
ORDER BY SUM_TIMER_WAIT DESC
limit 20;

掌握这些sql,你能轻松知道你的库那些表存在问题,然后考虑怎么去优化。   

总结

下载本文
显示全文
专题