sql-表空间
表空間
?編輯目錄
表空間的典型應用
編輯 典型應用一:控制用戶所占用的表空間配額。 在一些大型的數據庫應用中,我們需要控制某個用戶或者某一組用戶其所占用的磁盤空間。這就好像在文件服務器中,需要為每個用戶設置磁盤配額一樣,以防止硬盤空間耗竭。所以,在數據庫中,我們也需要限制用戶所可以使用的磁盤空間大小。為了達到這個目的,我們就可以通過表空間來實現。 我們可以在Oracle數據庫中,建立不同的表空間,為其設置最大的存儲容量,然后把用戶歸屬于這個表空間。如此的話,這個用戶的存儲容量,就受到這個表空間大小的限制。 典型應用二:控制數據庫所占用的磁盤空間。 有時候,在Oracle數據庫服務器運行過程中,可能運行不止一個服務。除了數據庫服務器外,可能還有郵件服務器等應用系統服務器。為此,就需要先對Oracle數據庫的磁盤空間作個規劃,否則,當多個應用程序服務所占用的磁盤空間都無限增加時,最后可能導致各個服務都因為硬盤空間的耗竭而停止。所以,在同一臺服務器上使用多個應用程序服務時,我們需要先為各個應用服務規劃分配磁盤空間,各服務的磁盤空間都不能夠超過我們分配的最大限額,或者超過后及時地提醒我們。只有這樣,才能夠避免因為磁盤空間的耗竭而導致各種應用服務的崩潰。 典型應用三:靈活放置表空間,提高數據庫的輸入輸出性能。 數據庫管理員還可以將不同類型的數據放置到不同的表空間中,這樣可以明顯提高數據庫輸入輸出性能,有利于數據的備份與恢復等管理工作。因為我們數據庫管理員在備份或者恢復數據的時候,可以按表空間來備份數據。如在設計一個大型的分銷系統后臺數據庫的時候,我們可以按省份建立表空間。與浙江省相關的數據文件放置在浙江省的表空間中,北京發生業務記錄,則記錄在北京這個表空間中。如此,當浙江省的業務數據出現錯誤的時候,則直接還原浙江省的表空間即可。很明顯,這樣設計,當某個表空間中的數據出現錯誤需要恢復的時候,可以避免對其他表空間的影響。 另外,還可以對表空間進行獨立備份。當數據庫容量比較大的時候,若一下子對整個數據庫進行備份,顯然會占用比較多的時間。雖然說Oracle數據庫支持熱備份,但是在備份期間,會占用比較多的系統資源,從而造成數據庫性能的下降。為此,當數據庫容量比較大的時候,我們就需要進行設置多個表空間,然后規劃各個表空間的備份時間,從而可以提高整個數據庫的備份效率,降低備份對于數據庫正常運行的影響。 典型應用四:大表的排序操作。 我們都知道,當表中的記錄比較多的時候,對他們進行查詢,速度會比較慢。第一次查詢成功后,若再對其進行第二次重新排序,仍然需要這么多的時間。為此,我們在數據庫設計的時候,針對這種容量比較大的表對象,往往把它放在一個獨立的表空間,以提高數據庫的性能。 典型應用五:日志文件與數據文件分開放,提高數據庫安全性。 默認情況下,日志文件與數據文件存放在同一表空間。但是,這對于數據庫安全方面來說,不是很好。所以,我們在數據庫設計的過程中,往往喜歡把日志文件,特別是重要日志文件,放在一個獨立的表空間中,然后把它存放在另外一塊硬盤上。如此的話,當存放數據文件的硬盤出現故障時,能夠馬上通過存放在另一個表空間的重做日志文件,對數據庫進行修復,以減少企業因為數據丟失所帶來的損失。 當然,表空間的優勢還不僅僅這些,企業對于數據庫的性能要求越高,或者數據庫容量越大,則表空間的優勢就會越大。建立表空間與建立用戶的順序關系
編輯 在數據庫設計的時候,我們建議數據庫管理員按如下順序設置表空間。 第一步:建立表空間。 在設計數據庫的時候,首先需要設計表空間。我們需要考慮,是只建立一個表空間呢,還是需要建立多個表空間,以及各個表空間的存放位置、磁盤限額等等。 到底設計多少個表空間合理,沒有統一的說法,這主要根據企業的實際需求去判斷。如企業需要對用戶進行磁盤限額控制的,則就需要根據用戶的數量來設置表空間。當企業的數據容量比較大,而其又對數據庫的性能有比較高的要求時,就需要根據不同類型的數據,設置不同的表空間,以提高其輸入輸出性能。 第二步:建立用戶,并制定用戶的默認表空間。 在建立用戶的時候,我們建議數據庫管理員要指定用戶的默認表空間。因為我們在利用CREATE語句創建數據庫對象,如數據庫表的時候,其默認是存儲在數據庫的當前默認空間。若不指定用戶默認表空間的話,則用戶每次創建數據庫對象的時候,都要指定表空間,顯然,這不是很合理。 另外要注意,不同的表空間有不同的權限控制。用戶對于表空間A具有完全控制權限,可能對于表空間B就只有查詢權限,甚至連連接的權限的都沒有。所以,合理為用戶配置表空間的訪問權限,也是提高數據庫安全性的一個方法。?
?客戶要求用pgsql,所在服務器裝了一下pgsql,我出了一個pgsql的分類,看這篇文章前,把這個分類下的文章都可以看一下,這是我熟悉pgsql的一套流程。以前搞過一次pgsql,很早了。
1,查看數據庫
查看復制打印?2,查看多表
查看復制打印?3,查看單表
查看復制打印?4,查看索引
查看復制打印?5,查看表空間,以及大小
查看復制打印??
?
在數據庫運維工作中,經常會有數據目錄使用率較高需要調整的情況,通常會給數據庫建立多個表空間,
并分別位于不同的盤上,這時需要做的工作就是調整庫中現有表和索引的表空間,下面簡單總結下這塊維護
工作的內容,以下都是基于 PostgreSQL 9.0.1 做的測試。
一? 查詢某個表所在表空間的簡單方法
???
???? PostgreSQL 提供類似" \ "命令很方便得到相關信息,命令如下:
skytf=> \d test_2
??????????? Table "skytf.test_2"
?Column |???????? Type????????? | Modifiers?
--------+-----------------------+-----------
?id???? | integer?????????????? |?
?obj_id | integer?????????????? | not null
?name?? | character varying(64) |?
Indexes:
??? "idx_hash_name" hash (name)
??? "idx_test_2" btree (id, obj_id)
Tablespace: "tbs_skytf_idx"
?? 備注:如果這個表的表空間為當前數據庫的默認表空間,那么上面則不會顯示 Tablespace 信息,
???????????? 相反,則會顯示這張有的表空間,例如上面的表 test_2 的表空間為 tbs_skytf_idx,而
???????? ?? 表空間 "tbs_skytf_idx" 不是數據庫 skytf 的默認表空間, 那么如何查詢數據庫的默認
?????????? ? 表空間呢,可以通過以下命令查詢。
?????????
?????????
--1.1 查詢數據庫的默認表空間?????????
skytf=> select datname,dattablespace from pg_database where datname='skytf';
?datname | dattablespace?
---------+---------------
?skytf?? |????? 14203070
(1 row)
skytf=> select oid,spcname from pg_tablespace where oid=14203070;
?? oid??? |? spcname??
----------+-----------
?14203070 | tbs_skytf
(1 row)?????????
?? 備注:通過以上查出數據庫 skytf 的默認表空間為? tbs_skytf。
????
二 批量查詢數據庫表和索引的表空間
--2.1 查詢表和索引所在的表空間
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)), tb.spcname
? from pg_class a, pg_tablespace tb
?where a.reltablespace = tb.oid
?? and a.relkind in ('r', 'i')
?order by a.relpages desc;?
?
??
?備注:上面只取了部分結果,這個查詢能夠查詢表和索引所處的表空間,但是有一點需要注意,這個查詢
????????? ?僅顯示表空間不是數據庫默認表空間的數據庫對像,而我們通常需要查出位于數據庫默認表空間的
????????? ?對像,顯然上面的查詢不是我們想要的,接下來看另一個查詢。
--2.2 查詢位于默認數據庫表空間的對像
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner
from pg_class a
where a.relkind in ('r', 'i')
and reltablespace='0'
?order by a.relpages desc;
?
?? 備注:這個查詢加入限制條件 reltablespace='0',即可查找出位于當前數據庫默認表空間的
?????????????數據庫表和索引。 通常這才是我們想要的結果,接下來可以把部分表轉移到其它表空間上去,轉移
???????????? 的方法可以用 "ALTER TABLE table name move tablespace ?tablespace_name"或者重建索引移表空間等方法,這里不詳細介紹。
--2.3 查詢在某個表空間上的對像
| select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner from pg_class a, pg_tablespace tb? where a.relkind in ('r', 'i') and a.reltablespace=tb.oid and tb.spcname='tablespace_name' order by a.relpages desc; |
?
--2.4?手冊上對于 pgclass 視圖的 reltablespace 字段解釋
???? The tablespace in which this relation is stored. If zero, the database is default tablespace is?
implied. (Not meaningful if the relation has no on-disk file.)??
?
?select?pg_database.datname,?pg_database_size(pg_database.datname)?AS?size?from?pg_database;????//查看所有數據庫的大小?
?
?
?
?
轉載于:https://www.cnblogs.com/tank-/p/7222129.html
總結
- 上一篇: 聊聊、Zookeeper 客户端 Cur
- 下一篇: 更新CentOS Mysql到官方较新版