最近、私の Web サイトに問題があり、mysql の負荷が 800% に達し、ほとんどのクエリが "Sorting Result" セットで停止します。
問題は、私がテストを行ったことです。結果セットが 1 つの同じクエリで、並べ替えには 9.8 秒かかり、並べ替えなしでは 0.02 秒かかりました。クエリには、where 条件と group by が含まれています。
SQLは最適化され、検索はインデックス付きフィールドで行われ、数日前まではすべてうまくいきました. トラフィックの急増も、コードの変更も、何もありません。
過去にこの問題が発生したことがありますか、それともどうすれば修正できますか?
ありがとう
編集:クエリの説明:
id: 1
select_type: SIMPLE
table: m
type: range
possible_keys: posterid_to_idx,to,poster_id
key: posterid_to_idx
key_len: 8
ref: NULL
rows: 6
Extra: Using where; Using filesort
繰り返しますが、同じクエリは数日前にうまくいきました。
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` longtext NOT NULL,
`poster_id` int(11) NOT NULL,
`poster_name` varchar(50) NOT NULL,
`to` int(11) NOT NULL,
`added` int(11) NOT NULL,
`picture` varchar(64) NOT NULL,
`folder` int(11) DEFAULT NULL,
`read` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `posterid_to_idx` (`poster_id`,`to`),
KEY `to` (`to`),
KEY `poster_id` (`poster_id`),
KEY `msg` (`id`,`poster_id`,`to`),
KEY `added` (`added`)
) ENGINE=InnoDB AUTO_INCREMENT=37548617 DEFAULT CHARSET=latin1
SELECT SQL_CALC_FOUND_ROWS m.body, m.id, m.poster_id, m.poster_name, m.to, m.added, m.picture, m.folder
FROM messages m
WHERE ((m.poster_id = '1885585' OR m.poster_id = '1886341')
AND (m.to = '1886341' OR m.to = '1885585'))
ORDER BY m.id DESC LIMIT 0, 10
トップ出力:
CPU: 6.0% user, 0.0% nice, 38.8% system, 0.2% interrupt, 55.0% idle
Mem: 11G Active, 1400M Inact, 5451M Wired, 87M Cache, 4923M Buf, 29G Free
Swap: 8000M Total, 8000M Free