日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一次MySQL性能优化实战(转)

發布時間:2025/3/14 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一次MySQL性能优化实战(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 首先是由于公司秉承快速開發原則,頻繁上線,導致每次忽視了性能問題!日積月累,所以導致系統越來越慢,所以如果你的系統查詢語句本來就優化的很好了可能參考意義不大!

  提取慢查詢日志文件,應該在你的DataDir目錄下面

  通過程序處理慢查詢文件,將文件格式的慢查詢導入到數據庫中:

1 mysql> desc slow_query;
2 +---------------+-------------+------+-----+---------+-------+
3 | Field???????? | Type????????| Null | Key | Default | Extra |
4 +---------------+-------------+------+-----+---------+-------+
5 | Date??????????| varchar(32) | NO?? |???? |???????? |?????? | 查詢發生的時間
6 | user??????????| varchar(64) | NO?? |???? |???????? |?????? |
7 | host??????????| varchar(64) | NO?? |???? |???????? |?????? |
8 | content?????? | text????????| NO?? |???? |???????? |?????? | 將Statement進行Mask后的語句,便于Group By
9 | query_time????| int(11)???? | NO?? |???? |???????? |?????? | 查詢所用時間,直接性能指標
10 | lock_time???? | int(11)???? | YES??|???? | 0?????? |?????? | 等待鎖定的時間
11 | rows_sent???? | int(11)???? | YES??|???? | 0?????? |?????? | 返回的結果行數
12 | rows_examined | int(11)???? | YES??|???? | 0?????? |?????? | 掃描行數(很重要,上萬以后就要重點注意了
13 | statement???? | text????????| YES??|???? | NULL????|?????? | 實際查詢語句
14 +---------------+-------------+------+-----+---------+-------+

  然后發揮您的想象力在這個表中盡力捕捉你想捕捉的,那類型語句壓力最大、掃描行數最多、等鎖最久……

  比如:

  優化后:

1 mysql> select sum(query_time)/count(*),count
2 (*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-20 22:50:52' and??Date<'2008-02-21 17:34:35';
3 +--------------------------+----------+-----------------+---------------------+---------------------+
4 | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date)?????????? | Max(Date)?????????? |
5 +--------------------------+----------+-----------------+---------------------+---------------------+
6 |?????????????????? 5.7233 |???? 2197 |?????????? 12574 | 2008-02-20 22:51:16 | 2008-02-21 17:34:10 |
7 +--------------------------+----------+-----------------+---------------------+---------------------+
8 1 row in set (0.09 sec)

  優化前:

1 mysql> select sum(query_time)/count(*),count(*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-17 22:50:52' and??Date<'2008-02-18 17:34:35';
2 +--------------------------+----------+-----------------+---------------------+---------------------+
3 | sum(query_time)/count(*) | count(*) | sum(query_time) | min(Date)?????????? | Max(Date)?????????? |
4 +--------------------------+----------+-----------------+---------------------+---------------------+
5 |?????????????????? 2.5983 |????16091 |?????????? 41810 | 2008-02-17 22:50:58 | 2008-02-18 17:34:34 |
6 +--------------------------+----------+-----------------+---------------------+---------------------+
7 1 row in set (0.15 sec)

  再比如,優化前:

  基本信息:

  慢查詢統計從 2008-02-17 17:59:34 到2008-02-18 22:45:22時間段,接近29個小時的數據;

  總共有慢查詢28914個,平均一小時有1000個慢查詢;(花了一天優化降到每小時100個的樣子了,成就感啊)

  所有慢查詢耗費總時間75690秒;

  慢查詢時間設置是大于2秒

  參數說明:

  sum--總執行時間(秒);

  count--執行次數;

  avg--平均執行時間(秒);

  content--類似SQL語句的表達通式,其中'DD'代表數字;

  statement--某一條具體執行的SQL語句

  由于訪問時的鎖,導致update非常慢:

1 mysql> select count(*) as n,sum(query_time) as s, sum(query_time)/count(*) as avg,substring_index(statement,' ',2) as u from slow where statement like 'update%' and query_time>14 group by u;
2 +-----+------+---------+--------------------------+
3 | n?? | s????| avg???? | u????????????????????????|
4 +-----+------+---------+--------------------------+
5 |?? 7 |??112 | 16.0000 | update conversation??????|
6 | 151 | 2413 | 15.9801 | update user??????????????|
7 |?? 4 |?? 65 | 16.2500 | update user_modification |
8 +-----+------+---------+--------------------------+

  說明程序中還是存在一些忘記釋放事務鎖的情況

  最耗費資源的10個查詢:

  其中第1,2,5應該是同一類查詢,這樣的話這一類查詢占總查詢的一半以上,每分鐘出現10個以上這樣的慢查詢,需要重點解決!

1 mysql> select sum(query_time) as sum, count(*) as count, sum(query_time)/count(*) as avg,statement from slow wher
2 e host like '%69.12.23.%' group by content order by sum desc limit 0,10\G
3 *************************** 1. row ***************************
4 ??????sum: 27326
5 ????count: 11681
6 ??????avg: 2.3394
7 …………

轉載于:https://www.cnblogs.com/wangbin/archive/2009/06/16/1504046.html

總結

以上是生活随笔為你收集整理的一次MySQL性能优化实战(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。