2012-09-10 3 views
1

mysql 데이터베이스와 관련된 문제가 있습니다. 나는 리눅스 웹 서버 관리자이고 나는 mysql 쿼리에 문제가있다. 데이터베이스가 매우 작습니다. 로그에서 추적을 시도했는데 쿼리에 최소 5 초가 걸리는 것으로 나타났습니다. 사이트의 첫 번째 페이지가 데이터베이스에서 제공됩니다. 클라이언트가 CMS를 사용 중입니다. 서버가 히트 수를 얻으면 데이터베이스 서버가 응답을 매우 천천히 시작하고 대기 시간이 5 초에서 몇 초로 증가합니다.MySQL 쿼리에 너무 많은 시간이 걸립니다

내가 확인 슬로우 쿼리 로그

{ 
Query_time: 11.480138 Lock_time: 0.003837 Rows_sent: 921 Rows_examined: 3333 

SET timestamp=1346656767; 
SELECT `Tender`.`id`, 
    `Tender`.`department_id`, 
    `Tender`.`title_english`, 
    `Tender`.`content_english`, 
    `Tender`.`title_hindi`, 
    `Tender`.`content_hindi`, 
    `Tender`.`file_name`, 
    `Tender`.`start_publish`, 
    `Tender`.`end_publish`, 
    `Tender`.`publish`, 
    `Tender`.`status`, 
    `Tender`.`createdBy`, 
    `Tender`.`created`, 
    `Tender`.`modifyBy`, 
    `Tender`.`modified` 
FROM `mcms_tenders` AS `Tender` 
WHERE `Tender`.`department_id` IN (31, 33, 32, 30); 
} 

로그의 모든 라인은 쿼리 시간 DIFF가 동일합니다. 성능을 조정할 방법이 있습니까?

업데이트

: 그래서 색인을 확인하는 명령을 실행

+----+-------------+--------+------+---------------+------+---------+------+-‌-----+-------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra  | 
+----+-------------+--------+------+---------------+------+---------+------+----‌​--+-------------+ 
| 1 | SIMPLE  | Tender | ALL | NULL   | NULL | NULL | NULL | 3542 | Using where | 
+----+-------------+--------+------+---------------+------+---------+------+----‌​--+-------------+ 
1 row in set, 1 warning (0.00 sec) 

클라이언트가 인덱스를 사용 말하고있다 : 여기EXPLAIN 결과입니다.

다음 출력이 있습니다. 그것은 그들이 Indexing을 사용하고 있다는 것을 의미합니다.

+ -------------- + ------------ + ---------- + ------ -------- + ------------- + ----------- + ------------ + - -------- + -------- + ------ + ------------ + --------- + | 표 | Non_unique | Key_name | Seq_in_index | Column_name | 데이터 정렬 | 카디널리티 | Sub_part | 포장 된 | Null | Index_type | 코멘트 | + -------------- + ------------ + ---------- + --------- ----- + ------------- + ----------- + ------------- + ---- ------ + -------- + ------ + ------------ + --------- + | mcms_tenders | 0 | PRIMARY | 1 | 이드 | A | 4264 | NULL | NULL | | BTREE | | + -------------- + ------------ + ---------- + --------- ----- + ------------- + ----------- + ------------- + ---- ------ + -------- + ------ + ------------ + --------- +

+2

EXPLAIN을 사용하여 쿼리가 인덱스 등을 사용하는지 확인하십시오. – j0nes

+0

대신'EXPLAIN EXTENDED'를 사용하십시오. 더 많은 정보를 제공합니다. –

+0

@ j0nes @ Rene Pot + ---- + ------------- + -------- + ------ + --------- ------ + ------ + --------- + ------ + ------ + ------------ - + | 이드 | select_type | 테이블 | 유형 | possible_keys | 열쇠 | key_len | 심판 | 행 | 추가 | + ---- + ------------- + -------- + ------ + ------------- - + ------ + --------- + ------ + ------ + ------------- + | 1 | 단순 | 텐더 | 전체 | NULL | NULL | NULL | NULL | 3542 | 사용 위치 | + ---- + ------------- + -------- + ------ + ------------- - + ------ + --------- + ------ + ------ + ------------- + 1 1 행 (0.00 초) – aditya

답변

0

"서버가 몇 번의 조회수를 얻었을 때"

'일부 숫자'를 정의하십시오. 더 많이 사용되면 데이터베이스를 읽는 것이 더 느립니다. 또한 MySQL에는 데이터가 변경 될 때 완전히 무효화되는 쿼리 캐시가 있습니다. 따라서 누군가이 테이블에서 레코드를 삽입, 삭제 또는 수정 할 때마다 테이블 날짜가 아직 캐시되지 않기 때문에 다음 쿼리가 더 느려집니다.

그러나이 쿼리는 매우 느리기 때문에로드가 너무 높거나 하드웨어가 충분하지 않거나 손상되었거나 데이터베이스에 인덱스가 없습니다 (색인을 추가한다고 가정하기 때문에 항상 처음에는 언급하지 않습니다. 데이터베이스로 작업하는 모든 사람들을위한 두 번째 성격).

+0

숫자가 253에서 521.30까지 다양합니다. 실행중인 쿼리를 모두 확인합니다. . 나는 왜 mysql 쿼리 캐시가 작동하지 않는지 모른다. 아무도 수정하지 않고 선택 쿼리 만 작동하고 있다고 확신합니다. 나는 개발자가 아니기 때문에 정확히 무엇을 할 수 있는지 제안 해 주시겠습니까 – aditya

+0

@ GolezTrol 하드웨어는 48 코어 CPU와 64GB RAM으로 구성되어 있습니다. 다른 공유 호스팅 사이트의 데이터베이스는 잘 돌아가고 있습니다. – aditya

+0

공유 호스팅은 힘들게 만듭니다. 해당 서버에서 실행되는 백만 개의 데이터베이스 일 수 있습니다. 당신은 어떻게 알겠습니까? 그러나 먼저 색인을 확인하십시오. 쿼리 자체는 간단하지만'where' 절에서'department_id'를 사용하기 때문에 해당 열의 인덱스가 쿼리 속도를 심각하게 높일 수 있습니다. 문제가 해결되지 않으면 다른 곳을보기 시작하십시오. – GolezTrol

1

이와 같이 쿼리의 성능을 조정하는 일반적인 방법은 department_id에 인덱스를 만드는 것입니다.

그러나 이것은 Tenders가 실제로 테이블이고 뷰가 아니라고 가정합니다. 문제가보기에 있기 때문에이를 확인해야합니다.

또한 문제는 서버에서 최종 사용자로의 연결 일 수 있다고 설명합니다. 쿼리가 실제로 그렇게 오래 걸리는지 확인하려면 서버에서 쿼리를 로컬에서 실행하거나 서버에서 실행 시간을 엄격하게 확인하십시오.

+0

@ Gordon Linoff. 로컬 서버에서 실행하는 경우 동일한 시간이 걸렸습니다. 쿼리 캐시 크기가 증가했지만. 문제가 해결되었습니다. 또한 나는 그것이 가능할 때마다 색인 생성을 사용하도록 클라이언트에게 말할 것입니다. 매우 감사합니다 – aditya

관련 문제