>  기사  >  데이터 베이스  >  mysql 저장 프로시저가 너무 느리면 어떻게 해야 합니까?

mysql 저장 프로시저가 너무 느리면 어떻게 해야 합니까?

王林
王林원래의
2020-09-27 14:48:323520검색

mysql 저장 프로시저가 너무 느린 문제에 대한 해결 방법: 먼저 my.cnf 구성 파일을 연 다음 [long_query_time=1] 구성을 추가하고 [tail -f /tmp/logs/mysqld를 통해 sql을 모니터링합니다. .log] 명령; 마지막으로 목표 성적 최적화를 수행하면 충분합니다.

mysql 저장 프로시저가 너무 느리면 어떻게 해야 합니까?

해결책:

(권장 튜토리얼: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.