私のウェブサイトは、アクセスのピーク時に深刻な問題を抱えています。多くのトラブルシューティングを行った後、問題はデータベースにあることがわかりました。
データのテーブルを取得する Index で実行されるこのメイン クエリがあります。
忙しい日には、サイトの初回読み込みに 30 ~ 45 秒かかりますが、その後は毎回約 5 分間非常に高速に読み込まれ、その後再び速度が低下し、最終的に負荷がかかりすぎてサイトがダウンします。
データベースで直接クエリをテストしたところ、まったく同じように実行されました。
これは、クエリまたは MySQL 構成と関係がありますか?
返される結果が小さい場合は完全に正常に機能しますが、リストが非常に大きい忙しい日には、サイトが実際に遅くなり、停止します.
編集:
すべての提案に感謝します。
一部の名前が適切ではなかったため、クエリを少し修正し、DB に修正を加えました。
すべての提案の後、クエリを変更して、ワイルドカード検索と、不要になったテーブルへの冗長なリクエストを削除しました。
クエリ自体は次のとおりです。
SELECT g.id, g.`name`, g.scores, g.sportFK, g.`desc`, g.`date`, s.id AS streamid
FROM games AS g
LEFT JOIN streams AS s ON s.gameFK = g.id
WHERE
(g.date >= '" . $date . "' AND g.date <= '" . $newdate . "')
AND g.sportFK IN (" . $sportfk . ")
ORDER BY g.date ASC"
これをテストした後、クエリの最初のパフォーマンスはまだ 33 秒で実行されており、その後のすべての実行は 0.04 秒で実行されています。これは、ピーク時が来てもサイトへの影響が同じであることを示唆しています。
から要求された情報も準備しましたEXPLAIN
。
これは「GAMES」テーブル用です
GAMES TABLE:
SIZE: 6MB
ROWS: 14841
TYPE: INNODB
これは「STREAMS」テーブル用です
STREAMS TABLE:
SIZE: 80MB
ROWS: 135296
TYPE: MyISAM
編集:マーティンは、書き込みについて指摘してくれてありがとう. この DB は別のソースからも一定の間隔で読み込まれるため、一定の READ 操作と WRITE 操作が発生します。これについては、もう少し研究する必要があります。