公司有個導資料的工具,是把資料庫裡面的一條條記錄生成sql檔案, 然後匯入到別的資料庫裡面,在匯入sql檔案的時候非常慢, 以前沒有這個問題。 後來網上查了下,也做了實驗都沒有效果。 後來看了下postgresql sql的手冊看了下系統的表,發現有個表可以檢視表所占用的空間,和檢視之類的.
觀察磁碟使用情況
table of contents
25.1. 判斷磁碟的使用量
25.2. 磁碟滿導致的失效
本章討論如何觀察postgresql資料庫系統的磁碟使用情況。
25.1. 判斷磁碟的使用量
每個表都有乙個主堆的磁碟檔案,大多數資料都儲存在這裡。如果乙個表有著可能會很長的字段, 則另外還有乙個toast檔案與這個表相關聯, 用於儲存因為數值太長而不能儲存在主表裡面的資料(參閱 section 50.2)。 如果有這個擴充套件表,那麼表上會有乙個toast索引。 當然,同時還可能有索引和基表關聯。 每個表和索引都存放在單獨的磁碟檔案裡 — 如果檔案超過一吉,甚至可能多於乙個檔案。 這些檔案的命名原則在 section 50.1 裡描述。
你可以從三個地方監視磁碟空間:從 psql 裡使用 vacuum 的資訊,從 psql 裡使用 contrib/dbsize 裡面的工具,以及在命令列上使用 contrib/oid2name 裡面的工具。如果 psql 和任何最近剛剛清理(或者分析過)的資料庫進行聯接, 那麼我們可以用查詢來檢視任意表的磁碟使用:
select relfilenode, relpages from pg_class where relname = 'customer';
relfilenode | relpages
-------------+----------
16806 | 60
(1 row)
每個頁通常都是 8 k位元組。(記住,relpages只是由 vacuum, analyze 和幾個 ddl 命令,比如create index 所更新。) 如果你想直接檢查表的磁碟檔案,那麼 relfilenode 應該有用。
要顯示 toast 的表使用的空間,我們可以使用乙個類似下面這樣的查詢:
select relname, relpages
from pg_class,
(select reltoastrelid from pg_class
where relname = 'customer') ss
where oid = ss.reltoastrelid
or oid = (select reltoastidxid from pg_class
where oid = ss.reltoastrelid)
order by relname;
relname | relpages
----------------------+----------
pg_toast_16806 | 0
pg_toast_16806_index | 1
你也可以很容易地顯示索引的用量:
select c2.relname, c2.relpages
from pg_class c, pg_class c2, pg_index i
where c.relname = 'customer'
and c.oid = i.indrelid
and c2.oid = i.indexrelid
order by c2.relname;
relname | relpages
----------------------+----------
customer_id_indexdex | 26
我們很容易用下面的資訊找出最大的表和索引:
select relname, relpages from pg_class order by relpages desc;
relname | relpages
----------------------+----------
bigtable | 3290
customer | 3144
contrib/dbsize 向我們的資料庫裡裝載一些函式,這些函式 允許我們在 psql 裡找出乙個表或者乙個資料庫的大小,而且不用 vacuum或者 analyze。
你也可以使用 oid2name 顯示磁碟用量。參閱 該目錄中的 readme.oid2name 獲取例子。它包括乙個為每個 資料庫顯示磁碟用量的指令碼。
根據上面查詢出rightgrouptable占用了很大的空間, 有5g多, 導致寫入資料很慢, 系統有張表示目錄樹,而且做了許可權的,每個使用者都有節點的許可權,這種設定導致了grouptable資料量非常大,而且現有的系統不再使用該錶,這裡需要清理一下表資料, 使用命令:
truncate table rightgrouptable
這個相當於刪除rightgrouptable裡面的所有資料, truncate比delete 快不少。
select relname, relpages from pg_class order by relpages desc limit 100 再查詢下,表空間占用就少了不少,然後再匯入資料就不再慢。
postgresql模板資料庫
template0和template1為postgresql資料庫的模板資料庫,新建的資料庫預設使用template1作為模板。template0和template1的區別在於template0無法修改,因此你可以修改template1資料庫以定製新建立的資料庫。template資料庫無法被刪除 d...
postgresql資料庫安裝
安裝並初始化 1 解壓資料庫並放到指定目錄 在opt目錄下 tar xvzf postgresql 10.1 1 linux x64 binaries.tar.gz 解壓出來之後目錄為pgsql 2 mv pgsql usr local pgsql 3 建立pgsql使用者並設定密碼 useradd...
資料庫 postgresql 安裝
當前專案是使用django框架搭建介面層的業務,資料庫端使用了postgresql,這裡只是簡單記錄下自己的安裝流程,因為開發機器使用的mac,所以流程只是針對mac。這裡我使用的homebrew,這個工具就不多說了,沒有用過的可以到這裡 執行下面命令即可 brew install postgres...