婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PostgreSQL教程(十四):數據庫維護

PostgreSQL教程(十四):數據庫維護

熱門標簽:漯河外呼電話系統 辦公外呼電話系統 合肥公司外呼系統運營商 打電話智能電銷機器人授權 外呼調研系統 美容工作室地圖標注 海豐有多少商家沒有地圖標注 重慶自動外呼系統定制 地圖標注和圖片名稱的區別

一、恢復磁盤空間:

    在PostgreSQL中,使用delete和update語句刪除或更新的數據行并沒有被實際刪除,而只是在舊版本數據行的物理地址上將該行的狀態置為已刪除或已過期。因此當數據表中的數據變化極為頻繁時,那么在一段時間之后該表所占用的空間將會變得很大,然而數據量卻可能變化不大。要解決該問題,需要定期對數據變化頻繁的數據表執行VACUUM操作。

    VACUUM命令存在兩種形式,VACUUM和VACUUM FULL,它們之間的區別見如下表格:

  無VACUUM VACUUM VACUUM FULL
刪除大量數據之后 只是將刪除數據的狀態置為已刪除,該空間不能記錄被重新使用。 如果刪除的記錄位于表的末端,其所占用的空間將會被物理釋放并歸還操作系統。如果不是末端數據,該命令會將指定表或索引中被刪除數據所占用空間重新置為可用狀態,那么在今后有新數據插入時,將優先使用該空間,直到所有被重用的空間用完時,再考慮使用新增的磁盤頁面。 不論被刪除的數據是否處于數據表的末端,這些數據所占用的空間都將被物理的釋放并歸還于操作系統。之后再有新數據插入時,將分配新的磁盤頁面以供使用。
執行效率   由于只是狀態置為操作,因此效率較高。 在當前版本的PostgreSQL(v9.1)中,該命令會為指定的表或索引重新生成一個數據文件,并將原有文件中可用的數據導入到新文件中,之后再刪除原來的數據文件。因此在導入過程中,要求當前磁盤有更多的空間可用于此操作。由此可見,該命令的執行效率相對較低。
被刪除的數據所占用的物理空間是否被重新規劃給操作系統。 不會 不會
在執行VACUUM命令時,是否可以并發執行針對該表的其他操作。   由于該操作是共享鎖,因此可以與其他操作并行進行。 由于該操作需要在指定的表上應用排它鎖,因此在執行該操作期間,任何基于該表的操作都將被掛起,知道該操作完成。
推薦使用方式 在進行數據清空是,可以使用truncate操作,因為該操作將會物理的清空數據表,并將其所占用的空間直接歸還于操作系統。 為了保證數據表的磁盤頁面數量能夠保持在一個相對穩定值,可以定期執行該操作,如每天或每周中數據操作相對較少的時段。 考慮到該操作的開銷,以及對其他錯誤的排斥,推薦的方式是,定期監控數據量變化較大的表,只有確認其磁盤頁面占有量接近臨界值時,才考慮執行一次該操作。即便如此,也需要注意盡量選擇數據操作較少的時段來完成該操作。
執行后其它操作的效率 對于查詢而言,由于存在大量的磁盤頁面碎片,因此效率會逐步降低。 相比于不執行任何VACUUM操作,其效率更高,但是插入的效率會有所降低。 在執行完該操作后,所有基于該表的操作效率都會得到極大的提升。

二、更新規劃器統計:

    PostgreSQL查詢規劃器在選擇最優路徑時,需要參照相關數據表的統計信息用以為查詢生成最合理的規劃。這些統計是通過ANALYZE命令獲得的,你可以直接調用該命令,或者把它當做VACUUM命令里的一個可選步驟來調用,如VACUUM ANAYLYZE table_name,該命令將會先執行VACUUM再執行ANALYZE。與回收空間(VACUUM)一樣,對數據更新頻繁的表保持一定頻度的ANALYZE,從而使該表的統計信息始終處于相對較新的狀態,這樣對于基于該表的查詢優化將是極為有利的。然而對于更新并不頻繁的數據表,則不需要執行該操作。

    我們可以為特定的表,甚至是表中特定的字段運行ANALYZE命令,這樣我們就可以根據實際情況,只對更新比較頻繁的部分信息執行ANALYZE操作,這樣不僅可以節省統計信息所占用的空間,也可以提高本次ANALYZE操作的執行效率。這里需要額外說明的是,ANALYZE是一項相當快的操作,即使是在數據量較大的表上也是如此,因為它使用了統計學上的隨機采樣的方法進行行采樣,而不是把每一行數據都讀取進來并進行分析。因此,可以考慮定期對整個數據庫執行該命令。

    事實上,我們甚至可以通過下面的命令來調整指定字段的抽樣率,如:
 

復制代碼 代碼如下:

    ALTER TABLE testtable ALTER COLUMN test_col SET STATISTICS 200
 

    注意:該值的取值范圍是0--1000,其中值越低采樣比例就越低,分析結果的準確性也就越低,但是ANALYZE命令執行的速度卻更快。如果將該值設置為-1,那么該字段的采樣比率將恢復到系統當前默認的采樣值,我們可以通過下面的命令獲取當前系統的缺省采樣值。
 
復制代碼 代碼如下:

    postgres=# show default_statistics_target;
     default_statistics_target
    ---------------------------
     100
    (1 row)
 

    從上面的結果可以看出,該數據庫的缺省采樣值為100(10%)。

三、VACUUM和ANALYZE的示例:
   

復制代碼 代碼如下:

    #1. 創建測試數據表。
    postgres=# CREATE TABLE testtable (i integer);
    CREATE TABLE
    #2. 為測試表創建索引。
    postgres=# CREATE INDEX testtable_idx ON testtable(i);
    CREATE INDEX
    #3. 創建批量插入測試數據的函數。
    postgres=# CREATE OR REPLACE FUNCTION test_insert() returns integer AS $$
    DECLARE
        min integer;
        max integer;
    BEGIN
        SELECT COUNT(*) INTO min from testtable;
        max := min + 10000;
        FOR i IN min..max LOOP
            INSERT INTO testtable VALUES(i);
        END LOOP;
        RETURN 0;
    END;
    $$ LANGUAGE plpgsql;
    CREATE FUNCTION
    #4. 批量插入數據到測試表(執行四次)
    postgres=# SELECT test_insert();
     test_insert
    -------------
               0
    (1 row)
    #5. 確認四次批量插入都成功。
    postgres=# SELECT COUNT(*) FROM testtable;
     count
    -------
     40004
    (1 row)
    #6. 分析測試表,以便有關該表的統計信息被更新到PostgreSQL的系統表。
    postgres=# ANALYZE testtable;
    ANALYZE
    #7. 查看測試表和索引當前占用的頁面數量(通常每個頁面為8k)。
    postgres=# SELECT relname,relfilenode, relpages FROM pg_class WHERE relname = 'testtable' or relname = 'testtable_idx';
        relname       | relfilenode    | relpages
    ---------------+-------------+----------
     testtable        |       17601   |      157
     testtable_idx  |       17604   |       90
    #8. 批量刪除數據。
    postgres=# DELETE FROM testtable WHERE i 30000;
    DELETE 30003
    #9. 執行vacuum和analyze,以便更新系統表,同時為該表和索引記錄高水標記。
    #10. 這里需要額外說明的是,上面刪除的數據均位于數據表的前部,如果刪除的是末尾部分,
    #      如where i > 10000,那么在執行VACUUM ANALYZE的時候,數據表將會被物理的縮小。
    postgres=# VACUUM ANALYZE testtable;
    ANALYZE
    #11. 查看測試表和索引在刪除后,再通過VACUUM ANALYZE更新系統統計信息后的結果(保持不變)。
    postgres=# SELECT relname,relfilenode, relpages FROM pg_class WHERE relname = 'testtable' or relname = 'testtable_idx';
        relname      | relfilenode     | relpages
    ---------------+-------------+----------
     testtable        |       17601   |      157
     testtable_idx  |       17604   |       90
    (2 rows)
    #12. 再重新批量插入兩次,之后在分析該表以更新其統計信息。
    postgres=# SELECT test_insert(); --執行兩次。
     test_insert
    -------------
               0
    (1 row)
    postgres=# ANALYZE testtable;
    ANALYZE
    #13. 此時可以看到數據表中的頁面數量仍然為之前的高水標記數量,索引頁面數量的增加
    #      是和其內部實現方式有關,但是在后面的插入中,索引所占的頁面數量就不會繼續增加。
    postgres=# SELECT relname,relfilenode, relpages FROM pg_class WHERE relname = 'testtable' or relname = 'testtable_idx';
        relname       | relfilenode    | relpages
    ---------------+-------------+----------
     testtable        |       17601   |      157
     testtable_idx  |       17604   |      173
    (2 rows)
    postgres=# SELECT test_insert();
     test_insert
    -------------
               0
    (1 row)
    postgres=# ANALYZE testtable;
    ANALYZE
    #14. 可以看到索引的頁面數量確實沒有繼續增加。
    postgres=# SELECT relname,relfilenode, relpages FROM pg_class WHERE relname = 'testtable' or relname = 'testtable_idx';
        relname      | relfilenode    | relpages
    ---------------+-------------+----------
     testtable        |       17601   |      157
     testtable_idx  |       17604   |      173
    (2 rows)
    #15. 重新批量刪除數據。
    postgres=# DELETE FROM testtable WHERE i 30000;
    DELETE 19996
    #16. 從后面的查詢可以看出,在執行VACUUM FULL命令之后,測試表和索引所占用的頁面數量
    #      確實降低了,說明它們占用的物理空間已經縮小了。
    postgres=# VACUUM FULL testtable;
    VACUUM
    postgres=# SELECT relname,relfilenode, relpages FROM pg_class WHERE relname = 'testtable' or relname = 'testtable_idx';
        relname      | relfilenode     | relpages
    ---------------+-------------+----------
     testtable        |       17602   |      118
     testtable_idx  |       17605   |       68
    (2 rows)

四、定期重建索引:

    在PostgreSQL中,為數據更新頻繁的數據表定期重建索引(REINDEX INDEX)是非常有必要的。對于B-Tree索引,只有那些已經完全清空的索引頁才會得到重復使用,對于那些僅部分空間可用的索引頁將不會得到重用,如果一個頁面中大多數索引鍵值都被刪除,只留下很少的一部分,那么該頁將不會被釋放并重用。在這種極端的情況下,由于每個索引頁面的利用率極低,一旦數據量顯著增加,將會導致索引文件變得極為龐大,不僅降低了查詢效率,而且還存在整個磁盤空間被完全填滿的危險。
    對于重建后的索引還存在另外一個性能上的優勢,因為在新建立的索引上,邏輯上相互連接的頁面在物理上往往也是連在一起的,這樣可以提高磁盤頁面被連續讀取的幾率,從而提高整個操作的IO效率。見如下示例:
    #1. 此時已經在該表中插入了大約6萬條數據,下面的SQL語句將查詢該索引所占用的磁盤空間。   
 

復制代碼 代碼如下:

    postgres=# SELECT relname, pg_relation_size(oid)/1024 || 'K' AS size FROM pg_class WHERE relkind='i' AND relname = 'testtable_idx';
        relname     | size
    ----------------+------
     testtable_idx | 1240K
    (1 row)
    #2. 刪除數據表中大多數的數據。
    postgres=# DELETE FROM testtable WHERE i > 20000;
    DELETE 50006
    #3. 分析一個該表,以便于后面的SQL語句繼續查看該索引占用的空間。
    postgres=# ANALYZE testtable;
    ANALYZE
    #4. 從該查詢結果可以看出,該索引所占用的空間并未減少,而是和之前的完全一樣。
    postgres=# SELECT pg_relation_size('testtable_idx')/1024 || 'K' AS size;
     size
    ------
     1240K
    (1 row)
    #5. 重建索引。
    postgres=# REINDEX INDEX testtable_idx;
    REINDEX
    #6. 查看重建后的索引實際占用的空間,從結果中可以看出索引的尺寸已經減少。
    postgres=# SELECT pg_relation_size('testtable_idx')/1024 || 'K' AS size;
     size
    ------
     368K
    (1 row)
    #7. 最后一點需要記住的是,在索引重建后一定要分析數據表。
    postgres=# ANALYZE testtable;
    ANALYZE

 五、觀察磁盤使用情況:

    1. 查看數據表所占用的磁盤頁面數量。
 

復制代碼 代碼如下:

    #relpages只能被VACUUM、ANALYZE和幾個DDL命令更新,如CREATE INDEX。通常一個頁面的長度為8K字節。
    postgres=# SELECT relfilenode, relpages FROM pg_class WHERE relname = 'testtable';
     relfilenode | relpages
    -------------+----------
           16412 |       79
    (1 row)
   

    2. 查看指定數據表的索引名稱和索引占用的磁盤頁面數量。
 
復制代碼 代碼如下:

    postgres=# SELECT c2.relname, c2.relpages FROM pg_class c, pg_class c2, pg_index i
        WHERE c.relname = 'testtable' AND c.oid = i.indrelid AND c2.oid = i.indexrelid
        ORDER BY c2.relname;
        relname    | relpages
    ---------------+----------
     testtable_idx |       46
    (1 row)
 

您可能感興趣的文章:
  • PostgreSQL教程(一):數據表詳解
  • PostgreSQL教程(二):模式Schema詳解
  • PostgreSQL教程(三):表的繼承和分區表詳解
  • PostgreSQL教程(四):數據類型詳解
  • PostgreSQL教程(五):函數和操作符詳解(1)
  • PostgreSQL教程(六):函數和操作符詳解(2)
  • PostgreSQL教程(七):函數和操作符詳解(3)
  • PostgreSQL教程(八):索引詳解
  • PostgreSQL教程(九):事物隔離介紹
  • PostgreSQL教程(十):性能提升技巧
  • PostgreSQL教程(十一):服務器配置
  • PostgreSQL教程(十二):角色和權限管理介紹
  • PostgreSQL教程(十三):數據庫管理詳解

標簽:錦州 珠海 來賓 株洲 晉城 烏海 衡陽 蚌埠

巨人網絡通訊聲明:本文標題《PostgreSQL教程(十四):數據庫維護》,本文關鍵詞  PostgreSQL,教程,十四,數據庫,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL教程(十四):數據庫維護》相關的同類信息!
  • 本頁收集關于PostgreSQL教程(十四):數據庫維護的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    av不卡在线观看| 亚洲国产成人高清精品| 日韩一区二区影院| 欧美久久一二区| 欧美日韩国产片| 欧美唯美清纯偷拍| 欧美区在线观看| 3d动漫精品啪啪1区2区免费| 欧美xxxxx牲另类人与| 精品福利二区三区| 欧美韩国日本一区| 夜夜夜精品看看| 日本亚洲天堂网| 国产又黄又大久久| 91免费视频网| 欧美在线不卡视频| 日韩精品一区二| 久久夜色精品国产噜噜av| 亚洲国产精品av| 亚洲精品免费在线播放| 免费在线观看视频一区| 国产精品自拍三区| 色综合天天综合色综合av| 欧美日韩精品一区二区三区四区| 日韩欧美中文一区| 国产精品激情偷乱一区二区∴| 亚洲一区二区精品视频| 美女高潮久久久| 成人精品小蝌蚪| 欧美区在线观看| 亚洲国产精品黑人久久久| 一二三区精品视频| 国产一区二区精品久久99| 91年精品国产| 久久人人97超碰com| 最新久久zyz资源站| 麻豆中文一区二区| 色婷婷久久99综合精品jk白丝| 欧美一区二区免费| 依依成人精品视频| 国产成人精品影院| 91精品蜜臀在线一区尤物| 国产精品色哟哟| 欧美aⅴ一区二区三区视频| 99久久亚洲一区二区三区青草| 日韩精品专区在线影院重磅| 亚洲图片激情小说| 国产一区二区三区av电影 | 蜜臀精品久久久久久蜜臀| jlzzjlzz国产精品久久| 久久综合丝袜日本网| 亚洲高清视频的网址| 99久久久精品| 国产欧美日韩视频在线观看| 美女精品一区二区| 欧美日韩激情一区二区| 亚洲日本va在线观看| 国产精品996| 久久久亚洲精品石原莉奈| 日精品一区二区三区| 成人黄色大片在线观看| 久久免费看少妇高潮| 美女在线一区二区| 91精品欧美一区二区三区综合在| 亚洲一区在线观看免费| 色天天综合色天天久久| 一区二区久久久久久| 色噜噜狠狠成人中文综合| 亚洲天天做日日做天天谢日日欢 | 亚洲综合在线观看视频| 成人一道本在线| 国产精品嫩草影院av蜜臀| 国产91色综合久久免费分享| 国产区在线观看成人精品| 国产精品香蕉一区二区三区| 久久久久久久国产精品影院| 国产乱对白刺激视频不卡| 久久久久久久综合日本| 国产成人精品午夜视频免费| 久久久精品天堂| eeuss鲁片一区二区三区| 亚洲视频一区在线观看| 欧美性受xxxx黑人xyx| 日韩激情一区二区| 欧美mv日韩mv国产网站app| 高清不卡一区二区| 最近日韩中文字幕| 欧美专区在线观看一区| 日韩av电影免费观看高清完整版 | 成人午夜大片免费观看| 中文字幕综合网| 欧美日韩视频在线观看一区二区三区 | 日韩精品一二三区| wwwwww.欧美系列| 成人黄色免费短视频| 亚洲午夜精品网| www亚洲一区| 99精品1区2区| 美国十次了思思久久精品导航| 国产亚洲精品精华液| 欧美综合一区二区| 久久国产精品色| 亚洲欧美日韩国产手机在线| 91精品婷婷国产综合久久竹菊| 懂色中文一区二区在线播放| 亚洲观看高清完整版在线观看| 精品国产青草久久久久福利| 99精品视频一区二区三区| 日本系列欧美系列| 亚洲同性gay激情无套| 日韩一区二区三区视频在线 | 97久久精品人人做人人爽50路| 午夜精品久久一牛影视| 国产精品素人一区二区| 欧美日韩一级二级| 成人性视频网站| 久久99热99| 香蕉乱码成人久久天堂爱免费| 久久九九全国免费| 91精品欧美久久久久久动漫| 一本色道久久综合亚洲精品按摩| 国产一区在线看| 免费在线欧美视频| 亚洲伦理在线精品| 国产亚洲成年网址在线观看| 精品视频一区三区九区| 成人在线综合网站| 国产资源精品在线观看| 亚洲va欧美va天堂v国产综合| 国产精品丝袜在线| 国产欧美一二三区| 久久新电视剧免费观看| 91精品国产91久久久久久最新毛片 | 国产精品18久久久久久vr| 奇米精品一区二区三区在线观看 | 欧美三级中文字幕| 一本色道综合亚洲| 91亚洲精品久久久蜜桃网站| 国产a级毛片一区| 国产精品91xxx| 国产成人免费xxxxxxxx| 极品美女销魂一区二区三区| 日本欧美一区二区在线观看| 亚洲五月六月丁香激情| 亚洲第一主播视频| 亚洲福利国产精品| 亚洲国产另类精品专区| 亚洲成人动漫在线免费观看| 亚洲一区二区黄色| 五月天久久比比资源色| 爽好久久久欧美精品| 天天色天天操综合| 麻豆精品在线视频| 国产麻豆9l精品三级站| 福利一区二区在线| 成人激情黄色小说| 一本一道久久a久久精品综合蜜臀| eeuss鲁片一区二区三区| 色婷婷av一区二区三区之一色屋| 91国产精品成人| 在线播放日韩导航| 久久先锋资源网| 国产精品你懂的在线欣赏| 亚洲女人的天堂| 亚洲18影院在线观看| 捆绑调教一区二区三区| 国产黄色成人av| 在线亚洲+欧美+日本专区| 在线播放一区二区三区| 精品国产免费人成电影在线观看四季| 国产亚洲一区二区在线观看| 日韩一区欧美一区| 日本亚洲最大的色成网站www| 国产成人在线观看| 欧美性猛交xxxx黑人交| 欧美zozo另类异族| 亚洲人成亚洲人成在线观看图片 | 久久福利视频一区二区| 国产91露脸合集magnet| 欧美性xxxxxxxx| 久久一区二区三区四区| 伊人性伊人情综合网| 激情综合五月婷婷| 在线视频观看一区| 久久午夜羞羞影院免费观看| 夜夜嗨av一区二区三区四季av| 美国三级日本三级久久99 | 国产jizzjizz一区二区| 欧美日韩视频一区二区| 国产午夜精品一区二区三区嫩草| 亚洲综合在线观看视频| 成人午夜视频福利| 日韩欧美亚洲另类制服综合在线| 亚洲国产精品激情在线观看| 日本不卡不码高清免费观看| 不卡电影免费在线播放一区| 欧美va在线播放| 丝袜美腿亚洲综合| 91久久国产最好的精华液| 国产亚洲视频系列|