webdevqa.jp.net

MySQL 5.7対5.5:単純なクエリの実行に50倍の時間がかかる

1,033,990行のテーブル「questions」を持つデータベース「algebra」があります。レコードには、INTである「解決済み」属性があります。簡単なクエリがあります

select count(*) from questions where solved = 0

CPUが似ている2台のサーバーがあります。両方のサーバーで、テーブルは同じです。 (データベースは本番環境のレプリカです)。それらはSSD上にあります。 1つのサーバーにはUbuntu 14.04とMySQL 5.5.49があり、別のサーバーにはUbuntu 16.04とMySQL 5.7.12があります。

問題は、このクエリがMySQL 5.5では0.009秒しかかかりませんが、MySQL 5.7では0.304秒かかることです。これは34倍遅いです!!!

クエリプランはほぼ同じです。

遅いサーバー:

id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    filtered        Extra
1       SIMPLE  questions       NULL    index   NULL    by_topic_solved 97      NULL    1033990 10.00   Using where; Using index

高速サーバー:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  questions   index   NULL    by_topic_solved 97  NULL    1033989 Using where; Using index

なぜこれが私を困惑させるのか。この新しい5.7セットアップで他のより複雑なパフォーマンスの問題を見てきましたが、これは基礎となるクエリの観点から取り組むべき最も単純な問題です。

これについての説明やどこから始めればよいかを把握しています。 my.cnfは、2つの間でほぼ同じでした。どんな提案もありがたく受け入れられます。

6
Igor Chudov

私はこの問題を完全に理解しました。新しいmysqlでは、query_cache_type = OFFのデフォルト設定により、クエリキャッシュが無効になっています。 query_cache_type = 1を設定してクエリキャッシュを再度有効にすると、すぐにパフォーマンスが向上しました。私のサイトではINSERT/UPDATEクエリの100倍のSELECTクエリを使用しているので、クエリキャッシュを使用することは理にかなっています。この方向に目を向けてくれてありがとう!

7
Igor Chudov