mysql存儲過程太慢怎么辦

mysql存儲過程太慢的解決方法:首先打開my.cnf配置文件;然后添加配置【long_query_time=1】;接著通過【tail -f /tmp/logs/mysqld.log】命令監控sql;最后進行針對性的優化即可。

mysql存儲過程太慢怎么辦

解決方法:

(推薦教程: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
喜歡就支持一下吧
點贊5 分享