問題タブ [postgresql-performance]

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.

0 投票する
4 に答える
2634 参照

ruby-on-rails - Heroku での単純な Postgre クエリの実行が遅い

Movie約 15,000 アイテムのモデルDvdと 3500 のモデルがあります。

次のクエリは、Heroku で実行されている Crane Postgres db を使用した単純な Rails 関連付けです。次のクエリに時間がかかる理由と、最終的に時間を短縮するにはどうすればよいか疑問に思っています。

0 投票する
3 に答える
5517 参照

postgresql - PostgreSQL のカウント クエリの最適化

postgresql に、常に更新される配列を含むテーブルがあります。

私のアプリケーションでは、特定のパラメーターがその配列列に存在しない行の数を取得する必要があります。私のクエリは次のようになります。

しかし、行の量とそのクエリの実行量を増やすと (1 秒あたり数回、場合によっては数百または数千回) パフォーマンスが大幅に低下します。これについては完全にはわかりません)。

基本的に私の質問は次のとおりです。

この状況に当てはまる、私が気付いていない既存のパターンはありますか? これには何が最善のアプローチでしょうか?

あなたが私に与えることができる提案は本当にありがたいです.

0 投票する
2 に答える
2231 参照

database - Postgresql:内部結合には70秒かかります

私は2つのテーブルを持っています-

テーブルA:1MM行、AsOfDate、Id、BId(テーブルBへの外部キー)

表B:50k行、Id、Flag、ValidFrom、ValidTo

表Aには、100のBIdにわたる2011/01/01から2011/12/31までの1日あたりの複数のレコードが含まれています。表Bには、100入札の重複しない(validfromとvalidtoの間の)複数のレコードが含まれています。

結合のタスクは、指定されたAsOfDateでBIdに対してアクティブだったフラグを返すことです。

このクエリは、64Gbのメモリを搭載した非常にハイエンドのサーバー(+ 3Ghz)で約70秒かかります。

私はこれをテストしているので、フィールドのすべての組み合わせにインデックスがあります-無駄です。

インデックス:a.AsOfDate、a.AsOfDate + a.bId、a.bidインデックス:b.bid、b.bid + b.validfrom

以下に提案されている範囲クエリも試してみました(62秒)

VMで実行されている無料バージョンのSQLServerでのこの同じクエリは、完了するまでに最大1秒かかります。

何か案は?

Postgres 9.2

クエリプラン

分析出力については、http://explain.depesz.com/s/1c5を参照してください。

これは、同じクエリに対するsqlserverからのクエリプランです。

0 投票する
1 に答える
316 参照

postgresql - 大きなパーティションでのクエリの実行が遅い

タイム スタンプ フィールドでパーティション化された DB スキーマがあり、各パーティションには 155 のタイム スタンプの一意の値が含まれ、サイズは 1.5 GB です。スキーマは非常に単純で、タイムスタンプ、オブジェクト ID、および追加フィールド (外部キーなし、結合なし) が含まれています。主キーはタイムスタンプとオブジェクト ID フィールドです。

現在、次のクエリの実行には約 50 秒かかります

条件の期間は 144 の時点をカバーします

実行計画は次のとおりです。

このクエリの実行を高速化するにはどうすればよいですか (10 秒以内に実行できます)

0 投票する
1 に答える
438 参照

sql - ループを INSERT / UPDATE の単一クエリに置き換える

私はPostgreSQLで関数を書いています。それは基本的に3つのステップを行います:

  1. ソース テーブルからレコードを取得します。
  2. ターゲット テーブルでフェッチされたレコードの値を確認し、ターゲット テーブルでレコードが見つかった場合は、フェッチされたレコードでターゲット テーブルのすべての値を更新します。そうでない場合は、フェッチされたレコードをターゲット テーブルに挿入します。

このループを実行する代わりに、挿入/更新用の単一のクエリを作成すると、上記のアプローチよりも高速になりますか? すべてのレコードをループして更新/挿入を行う代わりに、単一のクエリを記述して同じ結果を得るにはどうすればよいですか。

私の現在のアプローチは以下の通りです

0 投票する
4 に答える
62526 参照

sql - クエリ速度の向上:大きなpostgresテーブルでの単純なSELECT

PostgresデータベースのSELECTクエリの速度に関して問題があります。

キーとして2つの整数列を持つテーブルがあります:(int1、int2)このテーブルには約7000万行があります。

この環境で2種類の単純なSELECTクエリを作成する必要があります。

これらの2つの選択は、これらの7000万行のうちそれぞれ約10.000行を返します。これをできるだけ速く機能させるために、各列に1つずつ、合計2つのHASHインデックスを使用することを考えました。残念ながら、結果はそれほど良くありません。

これは、これらのクエリの1つのEXPLAINANALYZEの例です。約23秒かかります。私の期待は、この情報を1秒以内に取得することです。

これらはpostgresdbconfigのいくつかのパラメーターです。

どんな助け、コメントまたは考えでも本当にありがたいです。

前もって感謝します。

0 投票する
1 に答える
768 参照

sql - PostgreSQL クエリの効率

私は PostgreSQL を使用しています (私はデータベースの世界では新人です)。私が使用しているコードで見つけたこの種のクエリの効率について、あなたの意見を知りたいです。これらのクエリには多数の JOIN があり、そのうちの 1 つ (太字) には要求によって多くの行があります。これにより、リクエストごとに行を取得し、このすべての行データを含むフィールド (太字) を取得するために、GROUP BY request.id が強制されます。

この種のクエリは、これらすべての最大値を探すのに多くの時間を費やさなければならないと思いますが、これを行う別の方法がわかりません。その効率とそれを改善する方法についてのアイデアはありますか?

EXPLAIN はこれを返します

0 投票する
2 に答える
3354 参照

sql - Postgres UPDATE x WHERE id IN y

これはおそらく以前に尋ねられたことがありますが、「IN」のようなキーワードのグーグルはあまりうまく機能しません。

これは私の質問です:

内訳:注文テーブルのいずれかの列に表示されるすべての顧客について、すべての顧客のタイプ(intのみ)を2に設定します。

私のテストデータでは、これらのテーブルのいずれにも数百行を超える行は含まれていませんが、クエリは何分間も実行され(UNIONがなくても、大きな違いはないようです)、明らかに内部クエリを再実行します顧客の行ごとに1回。明らかに、それを単一のSELECT DISTINCT(id)に書き直してから、数百の単一行の更新を行い、ODBCアクセスに使用する言語でロジックを実行できますが、これは単なるハックです。

どうすればこれを正しく書き直すことができますか?

補遺:更新したいテーブルには、行ごとに数MBの比較的大きなBYTEAブロブが多数含まれています。これらはストレージ外部または拡張に設定されていますが、それによってシーケンシャルスキャンが遅くなる可能性があるのではないかと思います。これだけでなく、すべての更新には長い時間がかかるようです。

0 投票する
2 に答える
23040 参照

performance - PostgreSQLクエリに時間がかかりすぎる

数億行のデータベースがあります。私は次のクエリを実行しています:

where句がデータベースで一致するものを見つけると、数ミリ秒で結果が得られますが、クエリを変更しr."Name"てwhere句に存在しないものを指定すると、完了するまでに時間がかかりすぎます。PaymentsPostgreSQLは、各行を1つずつ比較して、テーブル(最も多くの行を含む)に対して順次スキャンを実行していると思います。

Rolespostgresqlは、テーブルに次の行が含まれているかどうかを最初にチェックするのに十分スマートではありませんName 'Moses'か?

Rolesテーブルには15行しか含まれていませんが、Paymentsには約3億5000万行が含まれています。

PostgreSQL9.2.1を実行しています。

ところで、同じスキーマ/データに対するこの同じクエリは、MSSQLServerで完了するのに0.024msかかります。

質問を更新し、数時間以内にEXPLAINANALYZEデータを投稿します。


分析結果の説明:http://explain.depesz.com/s/7e7


そして、ここにサーバー構成があります:

私はpostgresqlをi5cpu(4コア、3.3 GHz)、8 GBのRAM、およびCrucial m4SSD128GBで実行しています。


更新 これはクエリプランナーのバグのようです。Erwin Brandstetterの推薦で、私はそれをPostgresqlバグメーリングリストに報告しました。

0 投票する
2 に答える
262 参照

postgresql - このクエリでシーケンシャル スキャンが発生するのはなぜですか?

私は PostgreSQL に非常に慣れていないので、明らかなことが明らかでない場合はご容赦ください。6 つのテーブルに分散された最大 4 億 5000 万行のデータベースがあります (すべてのテーブルに主キーがあります)。次のクエリを実行すると:

po.「Id」は主キーです。データベース全体を VACUUM ANALYZED しただけです。EXPLAIN ANALYZE の詳細はこちらで確認できます。PaymentOrders テーブルには 4,000 万行が含まれ、Payments には 3 億 5,000 万行が含まれます。Windows 8 マシン、I5 CPU (4 コア 3.3 GHz)、8 GB の RAM で x64 PostgreSQL 9.2 を実行しています。また、私の postgresql.conf ファイルもここで見ることができます。

このクエリが Payments テーブルでシーケンシャル スキャンを引き起こす理由を知っている人はいますか? 何か間違ったことをしていますか、それとも PostgreSQL に重大な欠陥がありますか? PostgreSQLクエリプランナーで真剣に疑い始めました...