PostgreSQL sql查詢慢優化方案有一下幾種解決方案:
1.關閉會話
查詢慢sql的執行會話,關閉進程。
查看數據庫后臺連接進程
SELECT count(*) FROM pg_stat_activity;SELECT * FROM pg_stat_activity;
查看數據庫后臺連接進程,但是此條SQL不包含當前查詢進程
SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();SELECT * FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();
查看當前慢SQL,例如查詢執行時間超過1秒的SQL
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;?
可以使用pg_terminate_backend()終止連接。您必須是超級用戶才能使用此功能。這在所有操作系統上都是相同的。
SELECTpg_terminate_backend(pid)
FROMpg_stat_activity
WHERE-- 不刪除當前連接pid <> pg_backend_pid()-- 不刪除當前連接數據庫database_name的連接AND datname = 'database_name';
2.版本升級:
將PostgreSQL版本升級到最新版本,以實現更好的性能和功能。
查看服務器端版本
2.1 查看詳細信息
SELECT version();
2.2 查看版本信息
SHOW server_version;
2.3 查看數字版本信息包括小版號
SHOW server_version_num;
升級為更高的版本。?
3.優化內存和緩存
調整PostgreSQL內存設置,如shared_buffers和effective_cache_size等參數。
要讓PostgreSQL達到最佳性能,還要使用像pg_tune這樣的PostgreSQL優化工具,可以根據系統的內存大小,I/O和網絡性能,來調整PostgreSQL參數。例如常用的shared_buffers和effective_cache_size,它們是與訪問文件并維護內存緩存有關的重要參數,可以控制PostgreSQL訪問磁盤文件的頻繁程度。除此之外,還可以根據測試結果做出改變,例如increasing wal_buffers to improve write performance,這有助于將PostgreSQL寫入操作提升到最高水平。
最后,正確的PostgreSQL內核性能調優優化必須包含兩個要素:PostgreSQL參數設置以及服務器的配置。因此,對于數據庫管理員或性能調優者而言,正確的性能調優優化消耗大量時間,但它也是實現PostgreSQL最佳性能的必要之道。
舉例來說,想要提升PostgreSQL的性能,可以使用以下代碼:
ALTER SYSTEM SET shared_buffers = '1000MB';ALTER SYSTEM SET effective_cache_size = '2000MB';ALTER SYSTEM SET wal_buffers = '12MB';
一般shared_buffers?值應該被設為整個機器內存的 15% ~ 25%。
effective_cache_size參數有操作系統和數據庫評估多少內存可用磁盤緩存,PostgreSQL查詢計劃決定它是否固定在RAM中。索引掃描最有可能用于較高的值;如果該值為低將使用順序掃描。建議將effecve_cache_size設置為機器總RAM的50%。
wal buffer是預寫日志(wal)緩沖區,緩沖區的默認大小由wal_buffers設置設置—最初為16MB。如果要調優的系統有大量并發連接,那么wal_buffers的值越高,性能越好。
4.合理的索引
建立合理的索引可以極大的提高查詢性能。
可以使用navicat ,選中數據庫,右鍵》》維護》》重建索引
5.優化表設計
將表分成有意義的符合邏輯的、盡可能小和彼此獨立的部分,以減少查詢中的不必要數據量。
6.安裝和使用適當的擴展
安裝如pgTune和pgBadger等與PostgreSQL性能優化的工具,以及如pg_hint_plan和pg_stat_statements等擴展程序。