mysql存储历程太慢怎么办
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 |
查看表的索引等可否合理,通过针对性的优化以提高效率。