mysql INNODB 삽입 속도가 매우 느림

mysql INNODB 삽입 속도가 매우 느림

데이터베이스의 스키마는 다음과 같습니다.

 CREATE  TABLE  `items` (  
 `id` mediumint( 8  )  unsigned NOT  NULL  AUTO_INCREMENT ,
 `name` varchar( 45  )  NOT  NULL ,
 `main_type` tinyint( 4  )  NOT  NULL ,
 `rarity` tinyint( 4  )  NOT  NULL ,
 `stack_size` smallint( 6  )  NOT  NULL ,
 `sub_type` tinyint( 4  )  NOT  NULL ,
 `cost` mediumint( 8  )  unsigned NOT  NULL ,
 `ilvl` smallint( 6  )  unsigned NOT  NULL DEFAULT  '0',
 `flavor_text` varchar( 250  )  NOT  NULL ,
 `rlvl` tinyint( 3  )  unsigned NOT  NULL ,
 `final` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 PRIMARY  KEY (  `id`  )  ) ENGINE  = InnoDB  DEFAULT CHARSET  = ascii;

이제 이 테이블에 삽입을 수행하는 데 0.22초가 걸립니다. 단일 행 삽입을 수행하는 데 왜 그렇게 오랜 시간이 걸리는지 모르겠습니다. 읽기 속도는 0.005초 정도 정말 빠릅니다. here의 예제 구성을 사용하면개발자 mysql innodb평균은 ~0.002~0.005초입니다. 단일 삽입을 수행하는 데 왜 100배 이상의 시간이 걸리는지 이해가 되지 않습니다. 내 컴퓨터는 다음과 같습니다. OS:Debian Sid x86-x64, Mysql 5.1, RAM:4GB ddr2, CPU 2.0Ghz 듀얼 코어, HDD 7200RPM 32MB 캐시 640GB.

SELECT * FROM 에 시간이 거의 100배나 걸리는 이유 items; 대 삽입 items...; 나에게는 전혀 이해가되지 않습니다. 여전히 행이 70개에 불과한 작은 테이블이고, 행이 0개인 경우에도 그만큼 오래 걸렸습니다.

편집: 또한 이 테이블에는 ID를 통해 자체적으로 연결된 꽤 많은 다른 테이블이 있습니다. 그 중 몇 가지가 연결되어 있고 on update=cascade;를 수행합니다. 삭제 시 = 캐스케이드;. 나는 그것이 여기서 가장 큰 문제라고 생각합니다. 그렇다면 아마도 들어가서 변경하고 제거될 때 다양한 작은 항목을 개별적으로 삭제할 수 있습니다. 삽입 속도는 내가 삽입을 수행 items하든지 아니면 기본 테이블에 대한 외래 키 링크가 있는 다른 테이블에서도 수행하든 상관없이 ~0.2초인 것 같습니다 .

답변1

글쎄, 내 첫 번째 추측은 InnoDB가 아마도 손상되었을 것입니다. 없는지 확인하실 수 있습니다

  • 삽입 시 느린 작업을 수행하는 트리거
  • 테이블을 잠그는 진행 중인 프로세스
  • 이 테이블을 가리키는 외래 키/제약 조건

이러한 문제를 일으킬 수 있는 모든 항목에 대해 데이터베이스를 완전히 감사하는 가장 좋은 방법은 mysqldump 명령에서 스키마 덤프를 읽는 것입니다.

관련 정보