mysql存儲過程太慢的解決方法:首先打開my.cnf配置文件;然后添加配置【long_query_time=1】;接著通過【tail -f /tmp/logs/mysqld.log】命令監控sql;最后進行針對性的優化即可。
解決方法:
(推薦教程:mysql視頻教程)
第一步:修改/etc/my.cnf文件,找到[mysqld] 里面加入
#執行的sql log=/tmp/logs/mysqld.log? #記錄sql執行超過下面設置時間的sql log-slow-queries?=?/tmp/mysqlslowquery.log #執行時間大于等于1秒 long_query_time?=?1
然后你可以tail -f /tmp/logs/mysqld.log 監控所有執行的sql,同樣的方法可以監控mysqlslowquery.log 為執行時間超過long_query_time = 1(秒)的sql語句
比如通過第一步我們找到了某一個mysql 自定義函數執行慢func_getDevice(); 執行了15s,但并不知道這個方法里面到底是那一條sql影響了性能,那么就有了第二步。
第二步:進入mysql命令行,輸入
mysql>?set?profiling=1; mysql>?select?func_getDevice(1); mysql>?show?profiles; +----------+------------+-----------------------+ |?Query_ID?|?Duration???|?Query?????????????????| +----------+------------+-----------------------+ |????????1?|?0.00250400?|?select?*?from?TDevice?| +----------+------------+-----------------------+ 1?row?in?set?(0.00?sec)
這時候你就會看到一個詳細的sql執行列表,但默認只記錄15條sql,如果方法里面的sql比較多,那么可以通過設置
mysql>?set?profiling_history_size=20; mysql>?show?variables?like?'profiling%'; +------------------------+-------+ |?Variable_name??????????|?Value?| +------------------------+-------+ |?profiling??????????????|?ON????| |?profiling_history_size?|?15????| +------------------------+-------+ 2?rows?in?set?(0.00?sec) mysql>?select?func_getDevice(1); mysql>?show?profiles;
這是時候就可以準確的看到是那一條sql語句影響了性能,比如 Query_ID=1 ?select * from TDevice 影響了性能;
mysql>?show?profile?for?query?1;詳細查看執行一條sql的耗時情況 +--------------------------------+----------+ |?Status?????????????????????????|?Duration?| +--------------------------------+----------+ |?(initialization)???????????????|?0.000003?|? |?checking?query?cache?for?query?|?0.000042?|? |?Opening?tables?????????????????|?0.00001?|? |?System?lock????????????????????|?0.000004?|? |?Table?lock?????????????????????|?0.000025?|? |?init???????????????????????????|?0.000009?|? |?optimizing?????????????????????|?0.000003?|
查看表的索引等是否合理,通過針對性的優化以提高效率。
相關推薦:mysql視頻教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦