わかりました、質問が少し曖昧であることを感謝しますが、グーグルで一日を過ごした後、私はどこにも行きません.
問題は、特定のテーブルに約 1,000 ~ 1,500 万行の PostgreSQL データベースがあることです。
テーブルの DateTime フィールドに基づいて、すべての列の選択を行っています。結合はなく、where 句 (時間 >= x AND 時間 <= y) を使用した標準の選択のみです。フィールドにもインデックスがあります...
ローカル マシンで psql を使用して sql を実行すると、約 15 ~ 20 秒で実行され、50 万行が返されます。そのうちの 1 つは、行ごとに大量のデータを保持するテキスト フィールドです (プログラム スタック トレース)。 . 同じ SQL を使用して Npgsql、または Windows の pgadmin III で実行すると、約 2 分かかります。
これにより、ネットワークの問題であると考えるようになりました。クエリの実行中にマシンをチェックしましたが、大量のメモリや CPU を使用しておらず、ネットワーク速度もごくわずかです。
メモリ設定についても、Postgres サイトの推奨事項を確認しました。shmmax と shmall の更新を含みます。
Ubuntu 10.04、PSQL 8.4、4GB RAM、2.8GHz Quad Xeon (仮想だが専用リソース) です。マシンにはWindowsの対応物(2008 R2、SS2008)も搭載されていますが、オフになっています。クエリは、同じスキーマとデータで SS を使用して約 10 ~ 15 秒で返されます。これは直接的な比較にはならないことはわかっていますが、ディスク パフォーマンスの問題ではないことを示したかったのです。
質問は...何か提案はありますか?変更する必要があるネットワーク設定はありますか? 私が逃したものはありますか?データベースについてあまり多くの情報を提供することはできませんが、難読化された EXPLAIN ANALYZE を次に示します...
Index Scan using "IDX_column1" on "table1" (cost=0.00..45416.20 rows=475130 width=148) (actual time=0.025..170.812 rows=482266 loops=1)
Index Cond: (("column1" >= '2011-03-14 00:00:00'::timestamp without time zone) AND ("column1" <= '2011-03-14 23:59:59'::timestamp without time zone))
Total runtime: 196.898 ms