저는 최근 모든 것을 무결성을 유지하기 위해 다양한 mysql 테이블에 많은 트리거를 추가했습니다. 간단한 업데이트가 이제는 매우 오래 걸리기 때문에 내가 엔진을 죽였을지도 모른다고 걱정됩니다.InnoDB 엔진 단순 업데이트 쿼리가 지나치게 길어졌습니다 (query_end)
고려 :
UPDATE `partner_stats` SET earnings=1 WHERE date=CURRENT_DATE()
0 rows affected. (Query took 0.6523 sec)
SELECT * FROM `partner_stats` WHERE date = CURRENT_DATE()
1 total, Query took 0.0004 sec
SELECT
은 0.0004 필요하지만 간단한 UPDATE
은 0.65 걸립니다!
이 특정 표 에는 단 하나의 행이 있으며과 연관된 트리거가 없습니다. 엔진을 MyISAM으로 전환하면 문제가 해결되지만 나중에이 테이블에 대한 트리거를 추가해야 InnoDB를 고수 할 수 있습니다.
내 엔진에 문제가 있습니까? 다른 테이블과 작업하기에는 너무 바쁩니 까? 프로파일 링 또는 디버깅 옵션에는 어떤 것이 있습니까?
편집 : 프로파일 링을했고 그것을이 보여줍니다
mysql> show profile for QUERY 2;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000064 |
| checking permissions | 0.000008 |
| Opening tables | 0.000032 |
| System lock | 0.000007 |
| init | 0.000051 |
| Updating | 0.000069 |
| end | 0.011682 |
| query end | 0.218070 |
| closing tables | 0.000016 |
| freeing items | 0.000017 |
| logging slow query | 0.000003 |
| cleaning up | 0.000002 |
+----------------------+----------+
12 rows in set (0.00 sec)
가장 긴 시간을 차지하는 두 섹션은 끝이 분명하고 쿼리가 끝납니다. 이것들은 모두 binlog에 쓰는 것과 관련이 있습니다. 몇 가지 유용한 답변이있는 또 다른 질문이 있습니다. http://stackoverflow.com/questions/13234290/lots-of-query-end-states-in-mysql-all-connections-used-in-a-matter-of -의사록. 대답 중 하나는 "sync_binlog 변수를 1에서 0으로 변경했기 때문에 각 커밋에서 binlog 변경 사항을 디스크로 플러시하는 대신 운영 체제에서 binlog에 대한 fsync() 시점을 결정할 수 있습니다. "질의 종료"문제. " –