問題タブ [database-tuning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - Postgres 9.4: 10 倍遅く実行される ANY ARRAY ルックアップでのクエリ プランナーのハッシュ結合の選択を修正する方法
もちろん、これらの問題を理解するのは複雑で、多くの情報が必要になる可能性があることは理解していますが、この特定のケースに対する既知の問題または回避策があることを願っています. 最適ではないクエリ プランを引き起こすクエリの変更を絞り込みました (これは Postgres 9.4 を実行しています)。
次のクエリは、約 50 ミリ秒で実行されます。テーブルは約 200 万のtag_device
エントリを持つジャンクション テーブルで、devices
テーブルには約 150 万のエントリがあり、タグ テーブルには約 500,000 のエントリがあります (注: 実際の IP 値は作成されたものです)。
注意すべき点がいくつかあります。 device_ip
ip4r モジュール ( https://github.com/RhodiumToad/ip4r ) を使用して IP 範囲ルックアップを提供しており、この列には Gist インデックスがあります。上記のクエリは、次のクエリ プランを使用して約 50 ミリ秒で実行されます。
検索対象の ARRAY 内の IP アドレスの数を増やすと、クエリ プランが変更され、大幅に遅くなります。したがって、クエリの高速バージョンでは、配列に 30 個の項目があります。これを配列内の 80 項目に増やすと、クエリ プランが変更され、大幅に遅くなります (10 倍以上)。クエリは、他のすべての点で同じままです。新しいクエリ プランでは、マージ結合とネストされたループの代わりにハッシュ結合を使用します。以下は、配列に 30 個ではなく 80 個の項目がある場合の新しい (はるかに遅い) クエリ プランです。
デフォルトのクエリ プランを使用した上記のクエリは、約 500 ミリ秒で実行されます (10 倍以上遅くなります)。を使用してハッシュ結合をオフにするSET enable_hashjoin= OFF;
と、クエリ プランはマージ結合の使用に戻り、配列内の 80 個のアイテムで約 50 ミリ秒で再び実行されます。
繰り返しますが、ここでの唯一の変更は、検索される ARRAY 内のアイテムの数です。
プランナーがなぜ大規模なスローダウンをもたらす悪い選択をしているのか、誰か考えている人はいますか?
データベースはメモリに完全に収まり、SSD 上にあります。
また、クエリに制限を追加したときにプランナーが tag_device テーブルのインデックスを使用しないという問題に遭遇したため、CTE を使用していることも指摘したいと思います。基本的にここで説明されている問題: http://thebuild.com/blog/2014/11/18/when-limit-attacks/。
ありがとう!
neo4j - Neo4j Cypher クエリのチューニング
リレーショナル データベースに提供するのと同じレベルのクエリ チューニング サポートを Neo4j で提供したいと考えています。多くのチューニングの問題はデータ設計によって解決するのが最善であることは理解していますが、オプティマイザーを支援する必要がある場合もあります。Neo4j 2.2.5 のオプティマイザとクエリ チューニングに関するドキュメントはあまりないため、Neo4j での Cypher クエリ チューニングに関するいくつかの質問に答えてくれる人を期待しています。
1) オプティマイザー: リレーショナル DBMS では、オプティマイザーがより適切な決定を下すのに役立つ 1 つの方法は、統計を更新することです。コストベースのオプティマイザーがどのように決定を下すかについてのドキュメントは見つかりませんが、ルールベースのオプティマイザーから得られるよりも優れた答えを見つけるために、データに関する統計を収集する必要があると思います.
を。これらの統計を更新する方法はありますか?
b. 読み込み済みで読み取り専用にしようとしているデータベースのインデックスを削除して再作成すると、パフォーマンスが向上しますか?
c. オプティマイザーが下す決定を理解するのに役立つ可能性のある、オプティマイザーに関するドキュメントを知っていますか?
2) クエリ レベルのヒント: Cypher にインデックス ヒントのオプションがあることは知っていますが、多くの場合、TSQL で使用できる「強制順序」クエリ ヒントと同等のものがあると便利です。Neo4j の近い将来のリリースで、そのようなクエリのヒントを期待する必要があるかどうか知っていますか?
3) 一時オブジェクト: リレーショナル DBMS では、オプティマイザの制限に合わせなければならないことがあります。そのような場合、一時オブジェクトを作成してデータの一部を具体化し、クエリを簡素化できるようにします。Neo4j の近い将来のリリースで、一時的なラベルやその他の一時的なオブジェクトが利用可能になるという兆候はありますか?
ありがとう
mysql - 21 個の Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz を搭載した 12 GB RAM での SQL のパフォーマンス チューニング
こんにちは、巨大なトラフィックの Web サーバー用に MySQL を最適化しようとしています。Apache 2.4 と MySQL 5.6 バージョンを使用しています。
これらのパラメーターを MySQL 構成ファイルに入れました。
猫/etc/my.cnf
postgresql - Amazon RDS Postgres でグループ化が遅すぎる
Amazon RDS db.r3.4xlarge インスタンス (16CPU、122GB メモリ) で Postgres 9.4.4 を実行しています。私は最近、大規模なテーブル (〜 2 億 7000 万レコード) でかなり単純な集計を必要とするクエリの 1 つに出くわしました。クエリの実行には 5 時間以上かかります。
大きなテーブルの結合列とグループ化列には、インデックスが定義されています。work_memとtemp_buffersをそれぞれ1GBに設定して実験してみましたが、あまり役に立ちません。
これがクエリと実行計画です。どんなリードも高く評価されます。
これが実行計画です -
performance - Amazon RDS (PostgreSQL): メモリ使用量を最適化する
Amazon RDS (PostrgreSQL バージョン) でよくわからないことがあります。一部のクエリは、結果を表示するのに時間がかかります。関連するすべてのインデックスを設定しました(EXPLAINで示されているように)。だから、私のスキーマ設計によるものではないと思います。
大きなマシン (m3.xlarge) は高価すぎるため、使用しません。私のデータベースのサイズは約 300GB です。
Postgres は利用可能なすべてのメモリを使用していないようです (コンソールの「解放可能なメモリ」レポートは、常に ~10GB の空きメモリがあることを示しています...)。tune-your-postgres-rds-instanceで提案されているように、「パラメーター グループ」を調整しようとしています。特に、EFFECTIVE_CACHE_SIZE を 70% に設定しています。しかし、それは何も変わりません。
私はおそらくどこかで間違っています...何か考えはありますか?