2010-12-01 4 views
2

MySQL을 사용하는 특정 데이터베이스의 모든 테이블에서 삽입, 업데이트 및 삭제 속도가 느린 것 같습니다. 이러한 테이블의 데이터는 많지 않습니다 (2k에서 20k까지). 작은 수의 열 (5 ~ 10), 인덱스 (두 개) 및 중복 인덱스 문제가 없습니다. MyISAM으로 MySQL 5.0.45를 돌리고 있습니다.느린 MySQL 업데이트/삽입/삭제

나는 다음 쿼리를 실행하고이 5-7 초 정도 걸립니다 : 선택은 바로 돌아올 것

UPDATE accounts SET updated_at = '2010-10-09 11:22:53' WHERE id = 8; 

.

+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+ 
| id | select_type | table | type | possible_keys | key  | key_len | ref | rows | Extra  | 
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+ 
| 1 | SIMPLE  | accounts | index | NULL   | PRIMARY | 4  | NULL | 1841 | Using index | 
+----+-------------+----------+-------+---------------+---------+---------+------+------+-------------+ 

프로파일 러는 상황의 겉으로는 높은 숫자 이외의 어떤 것도 의미있는 데이터를 표시하지 않는 스위치 : :이 또한 도움이 될 수

+----------------------+----------+-------------------+---------------------+ 
| Status    | Duration | Context_voluntary | Context_involuntary | 
+----------------------+----------+-------------------+---------------------+ 
| (initialization)  | 0.000057 |     0 |     0 | 
| checking permissions | 0.000008 |     0 |     0 | 
| Opening tables  | 0.000013 |     0 |     0 | 
| System lock   | 0.000005 |     0 |     0 | 
| Table lock   | 0.000005 |     0 |     0 | 
| init     | 0.000061 |     0 |     0 | 
| Updating    | 0.000101 |     0 |     0 | 
| end     | 7.957233 |    7951 |     2 | 
| query end   | 0.000008 |     0 |     0 | 
| freeing items  | 0.000011 |     0 |     0 | 
| closing tables  | 0.000007 |     1 |     0 | 
| logging slow query | 0.000002 |     0 |     0 | 
+----------------------+----------+-------------------+---------------------+ 

설명은 다음 날 수 있습니다 :

+----------------------+----------+-----------------------+---------------+-------------+ 
| Status    | Duration | Source_function  | Source_file | Source_line | 
+----------------------+----------+-----------------------+---------------+-------------+ 
| (initialization)  | 0.000057 | check_access   | sql_parse.cc |  5306 | 
| checking permissions | 0.000008 | open_tables   | sql_base.cc |  2629 | 
| Opening tables  | 0.000013 | mysql_lock_tables  | lock.cc  |   153 | 
| System lock   | 0.000005 | mysql_lock_tables  | lock.cc  |   162 | 
| Table lock   | 0.000005 | mysql_update   | sql_update.cc |   167 | 
| init     | 0.000061 | mysql_update   | sql_update.cc |   429 | 
| Updating    | 0.000101 | mysql_update   | sql_update.cc |   560 | 
| end     | 7.957233 | mysql_execute_command | sql_parse.cc |  5122 | 
| query end   | 0.000008 | mysql_parse   | sql_parse.cc |  6116 | 
| freeing items  | 0.000011 | dispatch_command  | sql_parse.cc |  2146 | 
| closing tables  | 0.000007 | log_slow_statement | sql_parse.cc |  2204 | 
| logging slow query | 0.000002 | dispatch_command  | sql_parse.cc |  2169 | 
+----------------------+----------+-----------------------+---------------+-------------+ 

추가 정보 : 실행 중입니다. n 4 기가의 램이 보장 된 CentOS-5 VPS. updated_at 열에 색인이없고 어디서나 트리거되지 않습니다.

[I 시도 새로운 일]

  1. 새 테이블 (같은 사용) 실행 이노을 작성하고 영향을받는 테이블 중 하나에서 모든 기록을 삽입했다. (같은 문제)
  2. 데이터베이스를 백업하고 동일한 서버 인스턴스 내의 다른 데이터베이스로 복원했습니다. (같은 문제)
  3. 로컬 컴퓨터에 동일한 백업을 복원했는데 문제가 없었습니다.
  4. 문제 데이터베이스와 다른 데이터베이스 (A 워드 프레스 DB) 업데이트/삽입을 실행을 가지고 같은 MySQL 서버 인스턴스 내에서 다른 데이터베이스 를 시도/잘 삭제합니다.
  5. 을 다시 시작 mysqld를가와 (같은 문제) 버전 5.0.77 (같은 문제)
  6. 영향을받는 테이블 중 하나 (같은 문제)
에서 모든 인덱스를 삭제하는
  • 업데이트 MySQL은 지난 밤에 전체 서버를 다시 시작

    어떤 아이디어가 다음에 보입니까? 아니면 어떤 것이 문제일까요? 그것이 최근에 언제 나타나는지는 말할 수 없지만 최근의 문제에 더 가깝습니다.

  • +0

    updated_at 열에 인덱스가 있습니까? –

    +0

    이 컴퓨터는 어떤 종류의 컴퓨터입니까? 리소스가 제한적인 시스템 (예 : RAM이 많지 않음)에서 MySQL은 주 인덱스를 매번 디스크에서 강제로 읽을 수 있도록 메모리에 유지할 수 없습니다. –

    +0

    updated_at 열에 색인이없고 2 기가 보장 된 VPS에 있습니다. 동일한 mysql 서버 인스턴스에있는 다른 데이터베이스 (WordPress)는 업데이트/삽입/삭제를 잘 처리하는 것 같습니다. – Ruben

    답변

    1

    마지막으로 답을 찾았습니다. 그 데이터베이스는 어떻게 든 MYD와 MYI 파일이 누락되어 여전히 실행 중입니다. MYIS 파일이 MyISAM 테이블의 데이터를 보유하고 있지만 삽입/업데이트/삭제 속도가 느린 것을 고려할 때 이것이 가능한지 확실하지 않습니다.

    엔진을 MyISAM (이미 있던 엔진)으로 설정하고 그 파일을 다시 만들었습니다. 다시 실행/업데이트/삽입/삭제!

    1

    가변 길이 행이있는 경우 OPTIMIZE TABLE 가끔 실행해야 할 수도 있습니다.

    +0

    테이블을 잠급니다. 활동이 낮은 db 및 나는 약간의 작업 (2 k 레코드)이이 문제를 보여주는 테이블을 가지고 그래서 그것을 OPTIMIZE TABLE 실행했습니다. 안돼. 같은 문제. – Ruben

    +0

    컴퓨터의 바이탈은? 평균 하중? vmstat 정보? 낮은 숫양? 디스크 io 많이? 동일한 mysql 서버에 다른 많은 데이터베이스가 있습니까? mysql을 다시 시작 하시겠습니까? 이상한 소리 = ( – superfro

    +0

    ) MySQL을 이전에 재시동 해 보았습니다. 모든 중요한 통계가 좋아 보이고 잠 들어 있습니다. 로컬 컴퓨터의 데이터베이스에 최신 백업을 복원했습니다. 모든 업데이트/삽입/삭제가 빠릅니다. 이번에는 모든 것이 좋다고 생각해도 이해가 안되네요 로컬에서는 컨텍스트 전환과 차이가 있습니다 : 1 대 7951은 Context_voluntary에 나열되어 있습니다. – Ruben