가상 머신에서 InnoDB 엔진을 사용하여 MySQL 5.5 데이터베이스에 데이터를 저장하는 간단한 웹 애플리케이션이 실행 중입니다. 약 3 년 동안 모든 것이 잘 작동했지만 갑자기 속도가 매우 느려졌습니다.
예를 들어 주소를 보유한 매우 간단한 테이블이 있습니다.
CREATE TABLE `addresses` (
`address_id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(64) CHARACTER SET latin1 NOT NULL,
`firstname` varchar(64) CHARACTER SET latin1 NOT NULL,
`street` varchar(64) CHARACTER SET latin1 NOT NULL,
`housenumber` varchar(16) CHARACTER SET latin1 NOT NULL,
`zip` varchar(5) CHARACTER SET latin1 NOT NULL,
`city` varchar(64) CHARACTER SET latin1 NOT NULL,
`email` varchar(64) CHARACTER SET latin1 NOT NULL,
`phone` varchar(16) CHARACTER SET latin1 NOT NULL,
`birthdate` date NOT NULL,
PRIMARY KEY (`address_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
이 테이블에는 약 800 개의 항목이 있지만 실제로는 그렇지 않습니다. 그러나 쿼리 실행
SELECT * FROM addresses
테스트 목적으로는 결코 끝나지 않는 것 같습니다. 서버 자체의 mysql CLI로 이것을 확인했습니다. 테이블의 일부 행을 출력 한 다음 다음 행을 출력 할 때까지 매우 오래 기다립니다.
따라서 데이터 전송 단계에서 문제가 될 수 있지만 확실하지 않습니다.
VM에는 2GB의 RAM이 있으며 320MB 만 사용됩니다. CPU도 1 ~ 2 %로 매우 낮습니다. mytop은 서버를 차단하는 다른 쿼리를 표시하지 않습니다. IT 관리자는 하드웨어 측면에서 아무것도 변경하지 않았다고 말했다.
데이터베이스 서버를 다시 시작하고 가상 컴퓨터를 다시 시작하는 등의 작업을 이미 시도했습니다. 아무것도 도와주지 않았다.
편집하다:
EXPLAIN SELECT * FROM addresses
나 에게이 결과를 제공합니다 :
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | addresses | ALL | NULL | NULL | NULL | NULL | 793 | |
+----+-------------+-----------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)
mysql -u username -ppassword mydb -e 'SELECT * FROM addresses
은 느리게 출력되지만`> test.txt`를 추가하면 매우 빠르게 실행됩니다. 이제 이것은 아마도 다른 질문 일 것입니다!? 이것에 대해 어떻게 조사 할 수 있습니까?