mysql 저장 프로시저가 너무 느린 문제에 대한 해결 방법: 먼저 my.cnf 구성 파일을 연 다음 [long_query_time=1] 구성을 추가하고 [tail -f /tmp/logs/mysqld를 통해 sql을 모니터링합니다. .log] 명령; 마지막으로 목표 성적 최적화를 수행하면 충분합니다.
해결책:
(권장 튜토리얼: mysql 비디오 튜토리얼)
1단계: /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을 모니터링합니다. 실행 시간이 long_query_time = 1(초)을 초과하는 sql 문에 대해 mysqlslowquery.log를 모니터링하는 데에도 동일한 방법을 사용할 수 있습니다. mysql 이후 정의된 함수 func_getDevice();는 15초 동안 느리게 실행되지만 이 메서드의 어떤 SQL 문이 성능에 영향을 미치는지 알 수 없으므로 두 번째 단계가 있습니다.
2단계: 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 |
테이블의 인덱스가 합리적인지 확인하고 목표한 최적화를 통해 개선합니다. .
관련 권장 사항:
php training위 내용은 mysql 저장 프로시저가 너무 느리면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!