詳解PostgreSQL提升批量數(shù)據(jù)導(dǎo)入性能的n種方法
關(guān)鍵字:批量數(shù)據(jù)導(dǎo)入,數(shù)據(jù)加載,大量插入,加快,提升速度
多元化選擇時(shí)代,人生里很多事物都是如此,凡事都沒(méi)有一成不變的方式和方法。不管白貓黑貓,能抓老鼠的就是好貓,適合自己的就是最好的。
提升批量數(shù)據(jù)導(dǎo)入的方法亦是如此,沒(méi)有何種方法是最優(yōu)的,應(yīng)用任何方法前根據(jù)自己的實(shí)際情況權(quán)衡利弊,做出選擇。
批量導(dǎo)入數(shù)據(jù)之前,無(wú)論采取何種方式,務(wù)必做好相應(yīng)的備份。
導(dǎo)入完成后亦需對(duì)相應(yīng)對(duì)象進(jìn)行ANALYZE操作,這樣查詢優(yōu)化器才會(huì)按照最新的統(tǒng)計(jì)信息生成正確的執(zhí)行計(jì)劃。
下面正式介紹提升批量數(shù)據(jù)導(dǎo)入性能的n種方法。
方法1:禁用自動(dòng)提交。
psql \set AUTOCOMMIT off 其他 BEGIN; 執(zhí)行批量數(shù)據(jù)導(dǎo)入 COMMIT;
方法2:設(shè)置表為UNLOGGED。
導(dǎo)入數(shù)據(jù)之前先把表改成UNLOGGED模式,導(dǎo)入完成后改回LOGGED模式。
ALTER TABLE tablename SET UNLOGGED; 執(zhí)行批量數(shù)據(jù)導(dǎo)入 ALTER TABLE tablename LOGGED;
優(yōu)點(diǎn):
導(dǎo)入信息不記錄WAL日志,極大減少io,提升導(dǎo)入速度。
缺點(diǎn):
1.在replication環(huán)境下,表無(wú)法設(shè)置為UNLOGGED模式。
2.導(dǎo)入過(guò)程一旦出現(xiàn)停電死機(jī)等會(huì)導(dǎo)致數(shù)據(jù)庫(kù)不能干凈關(guān)庫(kù)的情況,數(shù)據(jù)庫(kù)中所有UNLOGGED表的數(shù)據(jù)將丟失。
方法3:重建索引。
導(dǎo)入數(shù)據(jù)之前先刪除相關(guān)表上的索引,導(dǎo)入完成后重新創(chuàng)建之。
DROP INDEX indexname; 執(zhí)行批量數(shù)據(jù)導(dǎo)入 CREATE INDEX ...;
查詢表上索引定義的方法
select * from pg_indexes where tablename ='tablename' and schemaname = 'schemaname';
方法4:重建外鍵。
導(dǎo)入數(shù)據(jù)之前先刪除相關(guān)表上的外鍵,導(dǎo)入完成后重新創(chuàng)建之。
ALTER TABLE ... DROP CONSTRAINT ... ; 執(zhí)行批量數(shù)據(jù)導(dǎo)入 ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY ... REFERENCES ...;
相關(guān)信息可查詢pg_constraint。
方法5:停用觸發(fā)器
導(dǎo)入數(shù)據(jù)之前先DISABLE掉相關(guān)表上的觸發(fā)器,導(dǎo)入完成后重新ENABLE之。
ALTER TABLE tablename DISABLE TRIGGER ALL; 執(zhí)行批量數(shù)據(jù)導(dǎo)入 ALTER TABLE tablename ENABLE TRIGGER ALL;
相關(guān)信息可查詢pg_trigger。
方法6:insert改copy
COPY針對(duì)批量數(shù)據(jù)加載進(jìn)行了優(yōu)化。
COPY ... FROM 'xxx';
方法7:?jiǎn)沃礽nsert改多值insert
減少sql解析的時(shí)間。
方法8:insert改PREPARE
通過(guò)使用PREPARE預(yù)備語(yǔ)句,降低解析消耗。
PREPARE fooplan (int, text, bool, numeric) AS INSERT INTO foo VALUES($1, $2, $3, $4); EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
方法9:修改參數(shù)
增大maintenance_work_mem,增大max_wal_size。
方法10:關(guān)閉歸檔模式,降低wal日志級(jí)別。
修改archive_mode參數(shù)控制歸檔開(kāi)啟和關(guān)閉。降低wal_level值為minimal來(lái)減少日志信息記錄。
此法需要重啟數(shù)據(jù)庫(kù),需要規(guī)劃停機(jī)時(shí)間。此外如有replication備庫(kù),還需考慮對(duì)其影響。
到此這篇關(guān)于PostgreSQL提升批量數(shù)據(jù)導(dǎo)入性能的n種方法的文章就介紹到這了,更多相關(guān)PostgreSQL批量數(shù)據(jù)導(dǎo)入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL長(zhǎng)事務(wù)與失效的索引查詢淺析介紹
pg中的長(zhǎng)事務(wù)會(huì)影響表中垃圾回收,導(dǎo)致表的年齡增長(zhǎng)無(wú)法freeze。能消耗事務(wù)的只有當(dāng)執(zhí)行了一些DML或者DDL操作后才能算是我們通常說(shuō)的長(zhǎng)事務(wù)。否則只能算是我們常說(shuō)的長(zhǎng)連接,當(dāng)然長(zhǎng)連接也有很多弊端,例如占用內(nèi)存、cpu等資源2022-09-09
PostgreSQL樹(shù)形結(jié)構(gòu)的遞歸查詢示例
這篇文章主要給大家介紹了關(guān)于PostgreSQL樹(shù)形結(jié)構(gòu)的遞歸查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
PostgreSQL管理工具phpPgAdmin入門(mén)指南
phpPgAdmin是用PHP開(kāi)發(fā)的一個(gè)基于web的PostgreSQL數(shù)據(jù)庫(kù)管理工具。和MySql時(shí)代的PHPMyAdmin類似。本文介紹了phpPgAdmin安裝和使用方法,需要的朋友可以參考下2014-03-03
postgresql?IvorySQL新增命令及相關(guān)配置參數(shù)詳解
這篇文章主要為大家介紹了postgresql?IvorySQL新增命令及相關(guān)配置參數(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
PostgreSQL向數(shù)據(jù)庫(kù)表中添加行數(shù)據(jù)的操作
這篇文章主要介紹了PostgreSQL向數(shù)據(jù)庫(kù)表中添加行數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié)
這篇文章主要介紹了postgresql 計(jì)算兩點(diǎn)距離的2種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01

