A. sqlserver查看哪些表有分區
SQLSERVER中,有時需要知道已經建了哪些分區表,從哪裡看?
1、直接用SQL語句查:
--分區數大於1的,就是我們想查看的分區表:
SELECT p.*,'|' AS SP ,t.* FROM sys.partitions AS p
inner JOIN sys.tables AS t ON p.object_id = t.object_id
inner join (
select object_id as object_id2,index_id, count(*) AS CNT FROM sys.partitions
group by object_id,index_id
having count(*)>1
) s on s.object_id2 = p.object_id
WHERE p.partition_id IS NOT NULL
order by t.name;
2、在管理器中查看:
Databases > [資料庫名稱] 節點 > 存儲(Storage) 節點 >
\ 分區架構(Partition Schemes ) 節點 > 選中一項 > 右鍵 > 查看依賴
\ 分區函數(Partition Functions ) 節點 > 選中一項 > 右鍵 > 生成腳本
3、有作多分區的表,屬性的 存儲(Storage) 會有 Partitioning 信息。
B. 怎麼修改sqlserver分區方案
創建一個分區表首先要定義你用來映射表內分區的分區函數。在下面定義的分區函數中,我將使用三個分區,每個分區對應於SalesHistoryArchive表中的每一種產品類型,這個表將在稍後定義。基本上,這些分區會把SalesHistoryArchive檔案表劃分成三個不同的表,它們由SQL Server自動維護。CREATE PARTITION FUNCTION [pf_Proct_Partition](VARCHAR(10)) AS RANGE LEFTFOR VALUES (N'BigScreen', N'Computer', N'PoolTable')定義函數的范圍決定分區值屬於哪一個邊界。RNAGE LEFT:指定分區值將小於或等於在分區函數中定義的值。在上面使用的分區函數中一共建立了四個分區。
C. SqlServer是如何管理,分配存儲空間的呢
Sql Server 區管理(GAM,SGAM)
大家都知道Sql Server 中數據文件存儲的最小單位是頁面(Page),但實際SQLSERVE並不是以頁面為單位給數據分配空間的,Sql Server默認的存儲分配單位是盤區(Extend)。這樣做的主要原因是為了避免頻繁的讀寫IO,提升性能。在表或其它對象分配存儲空間,不是直接分配一個8K的頁面,而是以一個盤區(Extend)為存儲分配單位,一個盤區為8個頁面(Size = 8*8K=64K)。
這樣,對區得操作就會非常頻繁,也要求Sql Server有自己的一套系統管理著數量眾多的區。其中最突出的出一個問題,那就是在存儲那些只有少量數據,不足8K的對象,如果也是分配給一個盤區,就會存在存儲空間上的浪費,降低了空間分配效率。
為解決上述問題,SQLSERVER提供了一種解決方案,定義了兩種盤區類型,統一盤區和混合盤區。
全局分配映射表 (GAM):統一盤區,GAM 頁記錄已分配的區。每個 GAM 包含 64,000 個區,相當於近 4 GB 的數據。GAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區可用;如果位為 0,則區已分配。
共享全局分配映射表 (SGAM):由多個對象共同擁有該盤區,SGAM 頁記錄當前用作混合區且至少有一個未使用的頁的區。每個 SGAM 包含 64,000 個區,相當於近 4 GB 的數據。SGAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區正用作混合區且有可用頁。如果位為 0,則區未用作混合區,或者雖然用作混合區但其所有頁均在使用中。
在實際為對象分配存儲盤區時,為了提高空間利用率,默認的情況下,如果一個對象一開始大小小於8個頁面,就盡量放在混合盤區中,如果該對象大小增加到8個頁面後,SQLSERVER會為這個對象重新分配一個統一盤區。
據區當前的使用情況,GAM 和 SGAM 中每個區具有以下位模式:
第0個bit為保留位元組,始終為0
第1個bit表示該頁面是否已分配,我們知道GAM頁用來管理區是否已分配,但一個區包含8個頁面,所以用該bit用來准確定位該區的某個頁面是否已分配出去了。
第2個bit表示該頁面是否混合分區的一個頁面。
第3個bit表示該頁面是否是一個IAM(索引分配映射)頁面。
第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。
第5~7個頁面表示該頁面的空間使用率情況。
D. sqlserver資料庫分區的原理
還是會有改變的,因為可以根據分區快速定位相應的數據。
當然如果要查的數據跨了分區了,就沒有多大改變了。
E. sqlserver 分區表有什麼好處
相當於把1個巨大的表拆分成數百個小表,特別是按照日期分,如果數據有3-5年,因為每次訪問可能只是幾天-幾個月,這樣就極大的縮少了數據范圍,掃描的數據量少了,速度自然快了。。
再加上使用分區索引後,分區索引是針對單個分區表的索引,這樣就會存在多個B+的索引,索引小了,維護起來自然快了,在單個分區里查詢,其面對的索引樹也是很小的,自然相關性能就提高了。。
F. 請問sqlserver 如何移動分區的ndf文件呢
打開MsSQL2008,找到作業該項,如果打不開或者SQL Server代理是未啟動狀態,請先在windows服務中啟動SQL Server代理(參考圖片),
2
右擊MsSQL2008對象資源管理器中的作業,選擇新建作業,輸入該作業你想用的名稱,類別不用管,說明裡面是輸入一些該作業完成的功能,可不寫,請務必勾選已啟用復選框.
3
點擊新建作業窗體左側的步驟項,點擊右側區域下方的新建按鈕,輸入步驟名稱,類型請選擇Transact-SQL腳本(T-SQL),運行身份默認,資料庫請選擇要進行分區的資料庫,請不要選擇master默認的
G. sqlserver 2012 怎麼建立分區
本文是我關於資料庫分區的方案的一些想法,或許有些問題。僅供大家討論。SqlServer (SqlServer 2005\SqlServer 2008)實現分區需要在企業版下進行.
SqlServer的分區分為大致有以下個過程:1、創建文件組用以存放數據文件 2、創建文件組用戶數據文件 3、創建分區函數 4、創建分區方案 5、在分區方案下創建表
本文是在SqlServer2012 下完成的。
http://blog.csdn.net/fwj380891124/article/details/48372791
H. SQLserver怎樣可以讓一個資料庫用幾個磁碟
向資料庫添加數據文件就行了, 可以添加多個
ALTER DATABASE 你的庫名
ADD FILE
(
NAME = Test1dat2,
FILENAME = 'x:\t1dat2.ndf', -- 設定文件在不同的磁碟分區
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)
一個資料庫可以由以下三種資料庫文件組成:
1.主數據文件(*.mdf)
2.次數據文件(*.ndf)
3.事務日誌文件(*.ldf)
其中主數據文件是所有資料庫文件的起點,每個資料庫有且只有一個主數據文件。
次數據文件用來保存主數據文件中容納不下的數據,可以有0個或者多個。
事務日誌文件就不說了,看名字就知道是做什麼用的。
使用create database 語句建庫的時候可以設定資料庫文件的屬性(包括文件名稱和保存位置)。
使用alter database 語句可以添加,刪除和修改資料庫文件的屬性。
I. sqlserver怎麼分庫分表
sql server 2008資料庫分離操作跟sql server 2005是一樣的,以下具體介紹如何分離sql server 資料庫:
1、打開 sql server 控制台(SQL Server Management Studio),然後登錄。
2、登錄時如果知道sa密碼可以使用「SQL Server身份驗證」模式登錄,如果不知道sa密碼可以使用「windows身份驗證」模式登錄就不需要密碼登錄。而sql server 2008的用戶一般是在安裝的時候自定義的用戶,但也可以使用「windows身份驗證」模式登錄。
3、登錄到控制到中之後,找到【資料庫】點擊展開,然後找到你所需要分離的資料庫名稱。選中資料庫【右鍵】-【任務】-【分離】即可。
附件說明:分離資料庫一般是需要將資料庫拷貝到其他機器或者是移動磁碟時和不需要使用該資料庫的情況下才做資料庫分離。資料庫一旦分離之後所對應的軟體將無法正常使用和打開資料庫。如果需要重新將資料庫還原到資料庫控制台中,選中【資料庫】-【右鍵】-【附加】,找到你所要附件的數據所在的磁碟路徑,選擇以「.MDF」為後綴的文件即可。
J. 如何使用SQLServer資料庫按月創建表分區
create table xxx(id number,time date)
parttion by range(time)
(partion part1 values less than (to_date('2012-01-31','yyyy-mm-dd')) tablespace tb1,
partion part 2 vales less than(to_date('2012-01-31','yyyy-mm-dd')) tablespace tb2);