sql-表空间
表空間
?編輯目錄
表空間的典型應(yīng)用
編輯 典型應(yīng)用一:控制用戶所占用的表空間配額。 在一些大型的數(shù)據(jù)庫(kù)應(yīng)用中,我們需要控制某個(gè)用戶或者某一組用戶其所占用的磁盤空間。這就好像在文件服務(wù)器中,需要為每個(gè)用戶設(shè)置磁盤配額一樣,以防止硬盤空間耗竭。所以,在數(shù)據(jù)庫(kù)中,我們也需要限制用戶所可以使用的磁盤空間大小。為了達(dá)到這個(gè)目的,我們就可以通過(guò)表空間來(lái)實(shí)現(xiàn)。 我們可以在Oracle數(shù)據(jù)庫(kù)中,建立不同的表空間,為其設(shè)置最大的存儲(chǔ)容量,然后把用戶歸屬于這個(gè)表空間。如此的話,這個(gè)用戶的存儲(chǔ)容量,就受到這個(gè)表空間大小的限制。 典型應(yīng)用二:控制數(shù)據(jù)庫(kù)所占用的磁盤空間。 有時(shí)候,在Oracle數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行過(guò)程中,可能運(yùn)行不止一個(gè)服務(wù)。除了數(shù)據(jù)庫(kù)服務(wù)器外,可能還有郵件服務(wù)器等應(yīng)用系統(tǒng)服務(wù)器。為此,就需要先對(duì)Oracle數(shù)據(jù)庫(kù)的磁盤空間作個(gè)規(guī)劃,否則,當(dāng)多個(gè)應(yīng)用程序服務(wù)所占用的磁盤空間都無(wú)限增加時(shí),最后可能導(dǎo)致各個(gè)服務(wù)都因?yàn)橛脖P空間的耗竭而停止。所以,在同一臺(tái)服務(wù)器上使用多個(gè)應(yīng)用程序服務(wù)時(shí),我們需要先為各個(gè)應(yīng)用服務(wù)規(guī)劃分配磁盤空間,各服務(wù)的磁盤空間都不能夠超過(guò)我們分配的最大限額,或者超過(guò)后及時(shí)地提醒我們。只有這樣,才能夠避免因?yàn)榇疟P空間的耗竭而導(dǎo)致各種應(yīng)用服務(wù)的崩潰。 典型應(yīng)用三:靈活放置表空間,提高數(shù)據(jù)庫(kù)的輸入輸出性能。 數(shù)據(jù)庫(kù)管理員還可以將不同類型的數(shù)據(jù)放置到不同的表空間中,這樣可以明顯提高數(shù)據(jù)庫(kù)輸入輸出性能,有利于數(shù)據(jù)的備份與恢復(fù)等管理工作。因?yàn)槲覀償?shù)據(jù)庫(kù)管理員在備份或者恢復(fù)數(shù)據(jù)的時(shí)候,可以按表空間來(lái)備份數(shù)據(jù)。如在設(shè)計(jì)一個(gè)大型的分銷系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)的時(shí)候,我們可以按省份建立表空間。與浙江省相關(guān)的數(shù)據(jù)文件放置在浙江省的表空間中,北京發(fā)生業(yè)務(wù)記錄,則記錄在北京這個(gè)表空間中。如此,當(dāng)浙江省的業(yè)務(wù)數(shù)據(jù)出現(xiàn)錯(cuò)誤的時(shí)候,則直接還原浙江省的表空間即可。很明顯,這樣設(shè)計(jì),當(dāng)某個(gè)表空間中的數(shù)據(jù)出現(xiàn)錯(cuò)誤需要恢復(fù)的時(shí)候,可以避免對(duì)其他表空間的影響。 另外,還可以對(duì)表空間進(jìn)行獨(dú)立備份。當(dāng)數(shù)據(jù)庫(kù)容量比較大的時(shí)候,若一下子對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行備份,顯然會(huì)占用比較多的時(shí)間。雖然說(shuō)Oracle數(shù)據(jù)庫(kù)支持熱備份,但是在備份期間,會(huì)占用比較多的系統(tǒng)資源,從而造成數(shù)據(jù)庫(kù)性能的下降。為此,當(dāng)數(shù)據(jù)庫(kù)容量比較大的時(shí)候,我們就需要進(jìn)行設(shè)置多個(gè)表空間,然后規(guī)劃各個(gè)表空間的備份時(shí)間,從而可以提高整個(gè)數(shù)據(jù)庫(kù)的備份效率,降低備份對(duì)于數(shù)據(jù)庫(kù)正常運(yùn)行的影響。 典型應(yīng)用四:大表的排序操作。 我們都知道,當(dāng)表中的記錄比較多的時(shí)候,對(duì)他們進(jìn)行查詢,速度會(huì)比較慢。第一次查詢成功后,若再對(duì)其進(jìn)行第二次重新排序,仍然需要這么多的時(shí)間。為此,我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,針對(duì)這種容量比較大的表對(duì)象,往往把它放在一個(gè)獨(dú)立的表空間,以提高數(shù)據(jù)庫(kù)的性能。 典型應(yīng)用五:日志文件與數(shù)據(jù)文件分開(kāi)放,提高數(shù)據(jù)庫(kù)安全性。 默認(rèn)情況下,日志文件與數(shù)據(jù)文件存放在同一表空間。但是,這對(duì)于數(shù)據(jù)庫(kù)安全方面來(lái)說(shuō),不是很好。所以,我們?cè)跀?shù)據(jù)庫(kù)設(shè)計(jì)的過(guò)程中,往往喜歡把日志文件,特別是重要日志文件,放在一個(gè)獨(dú)立的表空間中,然后把它存放在另外一塊硬盤上。如此的話,當(dāng)存放數(shù)據(jù)文件的硬盤出現(xiàn)故障時(shí),能夠馬上通過(guò)存放在另一個(gè)表空間的重做日志文件,對(duì)數(shù)據(jù)庫(kù)進(jìn)行修復(fù),以減少企業(yè)因?yàn)閿?shù)據(jù)丟失所帶來(lái)的損失。 當(dāng)然,表空間的優(yōu)勢(shì)還不僅僅這些,企業(yè)對(duì)于數(shù)據(jù)庫(kù)的性能要求越高,或者數(shù)據(jù)庫(kù)容量越大,則表空間的優(yōu)勢(shì)就會(huì)越大。建立表空間與建立用戶的順序關(guān)系
編輯 在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,我們建議數(shù)據(jù)庫(kù)管理員按如下順序設(shè)置表空間。 第一步:建立表空間。 在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,首先需要設(shè)計(jì)表空間。我們需要考慮,是只建立一個(gè)表空間呢,還是需要建立多個(gè)表空間,以及各個(gè)表空間的存放位置、磁盤限額等等。 到底設(shè)計(jì)多少個(gè)表空間合理,沒(méi)有統(tǒng)一的說(shuō)法,這主要根據(jù)企業(yè)的實(shí)際需求去判斷。如企業(yè)需要對(duì)用戶進(jìn)行磁盤限額控制的,則就需要根據(jù)用戶的數(shù)量來(lái)設(shè)置表空間。當(dāng)企業(yè)的數(shù)據(jù)容量比較大,而其又對(duì)數(shù)據(jù)庫(kù)的性能有比較高的要求時(shí),就需要根據(jù)不同類型的數(shù)據(jù),設(shè)置不同的表空間,以提高其輸入輸出性能。 第二步:建立用戶,并制定用戶的默認(rèn)表空間。 在建立用戶的時(shí)候,我們建議數(shù)據(jù)庫(kù)管理員要指定用戶的默認(rèn)表空間。因?yàn)槲覀冊(cè)诶肅REATE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象,如數(shù)據(jù)庫(kù)表的時(shí)候,其默認(rèn)是存儲(chǔ)在數(shù)據(jù)庫(kù)的當(dāng)前默認(rèn)空間。若不指定用戶默認(rèn)表空間的話,則用戶每次創(chuàng)建數(shù)據(jù)庫(kù)對(duì)象的時(shí)候,都要指定表空間,顯然,這不是很合理。 另外要注意,不同的表空間有不同的權(quán)限控制。用戶對(duì)于表空間A具有完全控制權(quán)限,可能對(duì)于表空間B就只有查詢權(quán)限,甚至連連接的權(quán)限的都沒(méi)有。所以,合理為用戶配置表空間的訪問(wèn)權(quán)限,也是提高數(shù)據(jù)庫(kù)安全性的一個(gè)方法。?
?客戶要求用pgsql,所在服務(wù)器裝了一下pgsql,我出了一個(gè)pgsql的分類,看這篇文章前,把這個(gè)分類下的文章都可以看一下,這是我熟悉pgsql的一套流程。以前搞過(guò)一次pgsql,很早了。
1,查看數(shù)據(jù)庫(kù)
查看復(fù)制打印?2,查看多表
查看復(fù)制打印?3,查看單表
查看復(fù)制打印?4,查看索引
查看復(fù)制打印?5,查看表空間,以及大小
查看復(fù)制打印??
?
在數(shù)據(jù)庫(kù)運(yùn)維工作中,經(jīng)常會(huì)有數(shù)據(jù)目錄使用率較高需要調(diào)整的情況,通常會(huì)給數(shù)據(jù)庫(kù)建立多個(gè)表空間,
并分別位于不同的盤上,這時(shí)需要做的工作就是調(diào)整庫(kù)中現(xiàn)有表和索引的表空間,下面簡(jiǎn)單總結(jié)下這塊維護(hù)
工作的內(nèi)容,以下都是基于 PostgreSQL 9.0.1 做的測(cè)試。
一? 查詢某個(gè)表所在表空間的簡(jiǎn)單方法
???
???? PostgreSQL 提供類似" \ "命令很方便得到相關(guān)信息,命令如下:
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"
?? 備注:如果這個(gè)表的表空間為當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)表空間,那么上面則不會(huì)顯示 Tablespace 信息,
???????????? 相反,則會(huì)顯示這張有的表空間,例如上面的表 test_2 的表空間為 tbs_skytf_idx,而
???????? ?? 表空間 "tbs_skytf_idx" 不是數(shù)據(jù)庫(kù) skytf 的默認(rèn)表空間, 那么如何查詢數(shù)據(jù)庫(kù)的默認(rèn)
?????????? ? 表空間呢,可以通過(guò)以下命令查詢。
?????????
?????????
--1.1 查詢數(shù)據(jù)庫(kù)的默認(rèn)表空間?????????
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)?????????
?? 備注:通過(guò)以上查出數(shù)據(jù)庫(kù) skytf 的默認(rèn)表空間為? tbs_skytf。
????
二 批量查詢數(shù)據(jù)庫(kù)表和索引的表空間
--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;?
?
??
?備注:上面只取了部分結(jié)果,這個(gè)查詢能夠查詢表和索引所處的表空間,但是有一點(diǎn)需要注意,這個(gè)查詢
????????? ?僅顯示表空間不是數(shù)據(jù)庫(kù)默認(rèn)表空間的數(shù)據(jù)庫(kù)對(duì)像,而我們通常需要查出位于數(shù)據(jù)庫(kù)默認(rèn)表空間的
????????? ?對(duì)像,顯然上面的查詢不是我們想要的,接下來(lái)看另一個(gè)查詢。
--2.2 查詢位于默認(rèn)數(shù)據(jù)庫(kù)表空間的對(duì)像
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;
?
?? 備注:這個(gè)查詢加入限制條件 reltablespace='0',即可查找出位于當(dāng)前數(shù)據(jù)庫(kù)默認(rèn)表空間的
?????????????數(shù)據(jù)庫(kù)表和索引。 通常這才是我們想要的結(jié)果,接下來(lái)可以把部分表轉(zhuǎn)移到其它表空間上去,轉(zhuǎn)移
???????????? 的方法可以用 "ALTER TABLE table name move tablespace ?tablespace_name"或者重建索引移表空間等方法,這里不詳細(xì)介紹。
--2.3 查詢?cè)谀硞€(gè)表空間上的對(duì)像
| 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?手冊(cè)上對(duì)于 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;????//查看所有數(shù)據(jù)庫(kù)的大小?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/tank-/p/7222129.html
總結(jié)
- 上一篇: 聊聊、Zookeeper 客户端 Cur
- 下一篇: 更新CentOS Mysql到官方较新版