PostgreSQL sql查詢(xún)慢優(yōu)化方案有一下幾種解決方案:
1.關(guān)閉會(huì)話(huà)
查詢(xún)慢sql的執(zhí)行會(huì)話(huà),關(guān)閉進(jìn)程。
查看數(shù)據(jù)庫(kù)后臺(tái)連接進(jìn)程
SELECT count(*) FROM pg_stat_activity;
SELECT * FROM pg_stat_activity;
查看數(shù)據(jù)庫(kù)后臺(tái)連接進(jìn)程,但是此條SQL不包含當(dāng)前查詢(xún)進(jìn)程
SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();
SELECT * FROM pg_stat_activity WHERE NOT pid=pg_backend_pid();
查看當(dāng)前慢SQL,例如查詢(xún)執(zhí)行時(shí)間超過(guò)1秒的SQL
select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '1 s' order by query_start ;?
可以使用pg_terminate_backend()終止連接。您必須是超級(jí)用戶(hù)才能使用此功能。這在所有操作系統(tǒng)上都是相同的。
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- 不刪除當(dāng)前連接
pid <> pg_backend_pid()
-- 不刪除當(dāng)前連接數(shù)據(jù)庫(kù)database_name的連接
AND datname = 'database_name'
;
2.版本升級(jí):
將PostgreSQL版本升級(jí)到最新版本,以實(shí)現(xiàn)更好的性能和功能。
查看服務(wù)器端版本
2.1 查看詳細(xì)信息
SELECT version();
2.2 查看版本信息
SHOW server_version;
2.3 查看數(shù)字版本信息包括小版號(hào)
SHOW server_version_num;
升級(jí)為更高的版本。?
3.優(yōu)化內(nèi)存和緩存
調(diào)整PostgreSQL內(nèi)存設(shè)置,如shared_buffers和effective_cache_size等參數(shù)。
要讓PostgreSQL達(dá)到最佳性能,還要使用像pg_tune這樣的PostgreSQL優(yōu)化工具,可以根據(jù)系統(tǒng)的內(nèi)存大小,I/O和網(wǎng)絡(luò)性能,來(lái)調(diào)整PostgreSQL參數(shù)。例如常用的shared_buffers和effective_cache_size,它們是與訪(fǎng)問(wèn)文件并維護(hù)內(nèi)存緩存有關(guān)的重要參數(shù),可以控制PostgreSQL訪(fǎng)問(wèn)磁盤(pán)文件的頻繁程度。除此之外,還可以根據(jù)測(cè)試結(jié)果做出改變,例如increasing wal_buffers to improve write performance,這有助于將PostgreSQL寫(xiě)入操作提升到最高水平。
最后,正確的PostgreSQL內(nèi)核性能調(diào)優(yōu)優(yōu)化必須包含兩個(gè)要素:PostgreSQL參數(shù)設(shè)置以及服務(wù)器的配置。因此,對(duì)于數(shù)據(jù)庫(kù)管理員或性能調(diào)優(yōu)者而言,正確的性能調(diào)優(yōu)優(yōu)化消耗大量時(shí)間,但它也是實(shí)現(xiàn)PostgreSQL最佳性能的必要之道。
舉例來(lái)說(shuō),想要提升PostgreSQL的性能,可以使用以下代碼:
ALTER SYSTEM SET shared_buffers = '1000MB';
ALTER SYSTEM SET effective_cache_size = '2000MB';
ALTER SYSTEM SET wal_buffers = '12MB';
一般shared_buffers?值應(yīng)該被設(shè)為整個(gè)機(jī)器內(nèi)存的 15% ~ 25%。
effective_cache_size參數(shù)有操作系統(tǒng)和數(shù)據(jù)庫(kù)評(píng)估多少內(nèi)存可用磁盤(pán)緩存,PostgreSQL查詢(xún)計(jì)劃決定它是否固定在RAM中。索引掃描最有可能用于較高的值;如果該值為低將使用順序掃描。建議將effecve_cache_size設(shè)置為機(jī)器總RAM的50%。
wal buffer是預(yù)寫(xiě)日志(wal)緩沖區(qū),緩沖區(qū)的默認(rèn)大小由wal_buffers設(shè)置設(shè)置—最初為16MB。如果要調(diào)優(yōu)的系統(tǒng)有大量并發(fā)連接,那么wal_buffers的值越高,性能越好。
4.合理的索引
建立合理的索引可以極大的提高查詢(xún)性能。
可以使用navicat ,選中數(shù)據(jù)庫(kù),右鍵》》維護(hù)》》重建索引
5.優(yōu)化表設(shè)計(jì)
將表分成有意義的符合邏輯的、盡可能小和彼此獨(dú)立的部分,以減少查詢(xún)中的不必要數(shù)據(jù)量。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-644265.html
6.安裝和使用適當(dāng)?shù)臄U(kuò)展
安裝如pgTune和pgBadger等與PostgreSQL性能優(yōu)化的工具,以及如pg_hint_plan和pg_stat_statements等擴(kuò)展程序。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-644265.html
到了這里,關(guān)于PostgreSQL查詢(xún)慢sql原因和優(yōu)化方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!