2011-11-23 1 views
1

우리는 데비안에서 MySQL 5.0.51을 사용하고 있습니다. 나는 큰 데이터베이스를 가지고있다 (하나의 테이블에 8 천만 행 이상, 또 다른 테이블에 30 억 이상, 또 다른 등등에 2 천만 개, 정수 기본 키가있는 각각의 테이블이 있고 대부분의 테이블도 상당히 넓다). 서버가 작동 중이다. 꽤 열심히.매우 큰 테이블을 가진 MySQL에서 'SHOW INDEX'가 느리거나 문제가 있습니까?

우리가 사용하고있는 프레임 워크 (Ruby on Rails)는 실제 문제를 야기하는 made a minor tweak을 가지고 있으며, 이것이 우리에게 영향을주는 것인지 또는 그것이 수행하는 쿼리 유형에 본질적인 것이 있는지 여부를 알아 내려고하고 있습니다. .

새로운 Rails 프로세스를 시작할 때 프레임 워크는 InnoDB 인 각 테이블에 대해 "SHOW INDEX FROM foo WHERE Key_name = 'PRIMARY'"를 실행합니다. 우리 서버에서, 더 큰 테이블의 경우 5 초에서 15 초 사이 인로드/다른 쿼리에 따라 다릅니다. 그것은 많은 시간을 추가합니다.

예상되는 동작입니까? 아니면 특정 상황에서만 발생하며 솔루션이 있습니다 (동일한 정보를 얻으려면 "SHOW CREATE TABLE foo"를 사용하는 것일 수 있습니다).

+0

당신은 INFORMATION_SCHEMA.STATISTICS SELECT * FROM'실행하려고 할 수있는 TABLE_SCHEMA = 'your_db_name'AND TABLE_NAME = 'your_table_name''? –

답변

0

아니요, 너무 느려서는 안됩니다. 난 그냥 약 4 천만 행을 가지고 있으며 0.1 초 미만 걸리는 테이블에서 그것을 시도했습니다.

SHOW INDEX은 이미 테이블 통계에서 사용할 수있는 정보 만 제공해야합니다. 내가 생각할 수있는 유일한 점은 테이블에 통계가없고 내부적으로 mysql이 ANALYZE TABLE을 호출하는 경우입니다.하지만 그렇게 좋지는 않을 것입니다.

0

우리는 레일즈 3.1과 같은 종류의 문제가 있습니다. 문제는 뒤에 테이블에 기본 키가없는 경우 SHOW INDEX가 ActiveRecord 작업에 너무 많이 호출된다는 것입니다. 테이블에 대한 기본 키가 있다고했지만 ActiveRecord가 이해할 수없는 속성이 있습니까?

기본 키가없는 문제에 대한 수정 요청을 했으므로 여기에서 답을 찾을 수 있습니다.

https://github.com/rails/rails/pull/3812

관련 문제