タグ付けされた質問 「postgresql-performance」

PostgreSQLクエリのパフォーマンスの問題

1
pgAdminはリモート操作で非常に遅い
私の開発サーバーにリモート接続しているローカルのpgAdminからこのクエリを実行します。 select * from users order by random() limit 1; それは17秒間ハングし、表示されます Total query runtime: 148 ms. 1 row retrieved. また、テーブルを右クリックしても、すべての操作でハングします。 その後、RDPを介して接続し、同じpgAdminバージョンで同じクエリを実行しますquery time: 32 ms。これにより、で結果がすぐに表示されます。 次に、ローカルのpgAdminからクエリを再度実行します。 Total query runtime: 337 ms. 1 row retrieved. サーバーに対して130ミリ秒のpingを実行しています。FTP経由でファイルをかなり高速にアップロードできるので、接続速度は十分すぎるはずです。 ローカルのpsqlで実行したときの同じクエリは、接続時間を含めて数秒で終了します。 ローカルのpgAdminでローカルのdbコピーを使用した同じクエリもすぐに終了します。 pgAdminのバージョンは1.20.0です。最新の1.22でも確認しました-まだ同じです。 pgAdminを高速化するにはどうすればよいですか? psqlは正常に動作することに注意してください。そこには同じ待ち時間がありません。 17秒間のクエリ実行のpgAdminログ: 2016-02-06 16:18:03 INFO : queueing : select * from users …

3
サブクエリを追加するとPostgreSQLクエリが非常に遅くなる
150万行のテーブルに対する比較的単純なクエリがあります。 SELECT mtid FROM publication WHERE mtid IN (9762715) OR last_modifier=21321 LIMIT 5000; EXPLAIN ANALYZE 出力: Limit (cost=8.84..12.86 rows=1 width=8) (actual time=0.985..0.986 rows=1 loops=1) -> Bitmap Heap Scan on publication (cost=8.84..12.86 rows=1 width=8) (actual time=0.984..0.985 rows=1 loops=1) Recheck Cond: ((mtid = 9762715) OR (last_modifier = 21321)) -> BitmapOr (cost=8.84..8.84 rows=1 …

1
インデックスを使用してpostgresでのソートを高速化する方法
私はpostgres 9.4を使用しています。 のmessagesスキーマは次のとおりです。メッセージはfeed_idに属し、posted_atを持っています。また、メッセージには親メッセージを含めることができます(返信の場合)。 Table "public.messages" Column | Type | Modifiers ------------------------------+-----------------------------+----------- message_id | character varying(255) | not null feed_id | integer | parent_id | character varying(255) | posted_at | timestamp without time zone | share_count | integer | Indexes: "messages_pkey" PRIMARY KEY, btree (message_id) "index_messages_on_feed_id_posted_at" btree (feed_id, posted_at DESC NULLS …

1
pg_trgmインデックスを使用した類似検索のクエリ時間が遅い
2つのpg_trgmインデックスをテーブルに追加しました。これは、ユーザー名、またはサインアップ中にスペルが間違っているメールアドレス( "@ gmail.con"など)でユーザーを検索する必要があるため、メールアドレスまたは名前によるあいまい検索を可能にします。ANALYZEインデックスの作成後に実行されました。 ただし、これらのインデックスのいずれかでランク付けされた検索を実行すると、ほとんどの場合非常に遅くなります。つまり、タイムアウトを長くすると、クエリが 60秒で返される場合がありますが、15秒という非常にまれな場合もありますが、通常はクエリがタイムアウトします。 pg_trgm.similarity_threshold0.3はのデフォルト値ですが、これを上げて0.8も違いはないようです。 この特定のテーブルには2,500万行以上があり、常に照会、更新、および挿入されます(それぞれの平均時間は2ミリ秒未満です)。セットアップは、汎用SSDストレージと多かれ少なかれデフォルトのパラメーターを備えたRDS db.m4.largeインスタンスで実行されているPostgreSQL 9.6.6です。pg_trgm拡張子はバージョン1.3です。 クエリ: SELECT * FROM users WHERE email % 'chris@example.com' ORDER BY email <-> 'chris@example.com' LIMIT 10; SELECT * FROM users WHERE (first_name || ' ' || last_name) % 'chris orr' ORDER BY (first_name || ' ' || last_name) <-> 'chris orr' …

1
PostgreSQL-数千の要素の配列での作業
列が整数配列として渡す値の大きなリストに含まれているかどうかに基づいて行を選択しようとしています。 これが私が現在使用しているクエリです: SELECT item_id, other_stuff, ... FROM ( SELECT -- Partitioned row number as we only want N rows per id ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY start_date) AS r, item_id, other_stuff, ... FROM mytable WHERE item_id = ANY ($1) -- Integer array AND end_date > $2 ORDER BY …

1
CLUSTERのパフォーマンスへの影響
Postgres 9.2データベースを最適化して、日付制限のあるクエリを高速化しようとしています。 私はtimestamp列を持っていますが、たいていはいつか尋ねているのでtimestamp、date解析するためのインデックスを作成しました: CREATE INDEX foo_my_timestamp_idx ON foo USING btree ((my_timestamp::date) DESC); 次に、パフォーマンスを向上させるために、CLUSTER foo上記のインデックスを使用してテーブルを作成します。 CLUSTER foo USING foo_my_timestamp_idx; SQL-CLUSTERのマニュアルによると、テーブル インデックス情報に基づいて物理的に並べ替えられます テーブルのPKを使用する他のクエリのパフォーマンスに影響があるかどうかを知ります(としましょうid_foo)。欠点はありますか?

3
Postgres部分インデックスの作成を高速化
Postgres 9.4で大きな(1.2 TB)静的テーブルの部分インデックスを作成しようとしています。 私のデータは完全に静的なので、すべてのデータを挿入してから、すべてのインデックスを作成できます。 この1.2 TBのテーブルrun_idには、データをきれいに分割するという名前の列があります。さまざまなをカバーするインデックスを作成することにより、優れたパフォーマンスを得ていますrun_id。次に例を示します。 CREATE INDEX perception_run_frame_idx_run_266_thru_270 ON run.perception (run_id, frame) WHERE run_id >= 266 AND run_id <= 270; これらの部分インデックスにより、望ましいクエリ速度が得られます。残念ながら、各部分インデックスの作成には約70分かかります。 CPUが制限されているようです(topプロセスの100%を示しています)。 部分インデックスの作成を高速化するために何かできることはありますか? システム仕様: 18コアXeon 192GB RAM RAIDに12個のSSD 自動バキュームがオフになっています maintenance_work_mem:64GB(高すぎる?) テーブル仕様: サイズ:1.26 TB 行数:10537億 一般的なインデックスサイズ:3.2GB(〜.5GBの差異があります) テーブル定義: CREATE TABLE run.perception( id bigint NOT NULL, run_id bigint NOT NULL, frame bigint …

2
タイムスタンプの範囲(1列)でのクエリの最適化
HerokuでPostgres 9.3を使用しています。 毎日多くの挿入と更新を行う100万件以上のレコードを含む「トラフィック」テーブルがあります。このテーブル全体でさまざまな時間範囲でSUM操作を実行する必要があります。これらの呼び出しには最大40秒かかる可能性があり、それを改善する方法に関する提案を聞きたいです。 このテーブルには次のインデックスが設定されています。 CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; SELECTステートメントの例を次に示します。 SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= 'Mon, 27 …

3
全文検索クエリでのORDER BYの最適化
entities1500万レコードまでの大きなテーブルがあります。の「ホッケー」に一致する上位5行を見つけたいname。 に全文索引がありますname。これは次のように使用されます。gin_ix_entity_full_text_search_name クエリ: SELECT "entities".*, ts_rank(to_tsvector('english', "entities"."name"::text), to_tsquery('english', 'hockey'::text)) AS "rank0.48661998202865475" FROM "entities" WHERE "entities"."place" = 'f' AND (to_tsvector('english', "entities"."name"::text) @@ to_tsquery('english', 'hockey'::text)) ORDER BY "rank0.48661998202865475" DESC LIMIT 5 期間25,623ミリ秒 計画を説明する 1制限(コスト= 12666.89..12666.89行= 5幅= 3116) 2->ソート(コスト= 12666.89..12670.18行= 6571幅= 3116) 3ソートキー:(ts_rank(to_tsvector( 'english' :: regconfig、(name):: text)、 '' 'hockey' '' :: tsquery)) 4->エンティティに対するビットマップヒープスキャン(コスト= …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.