『壹』 sql server 怎樣可以讓一個資料庫用幾個磁碟分區
向資料庫添加數據文件就行了, 可以添加多個
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 語句可以添加,刪除和修改資料庫文件的屬性。
『貳』 什麼是SQL Server自動化管理分區設計方案
(圖1:整體概念圖) 數據流經過分區方案,被分配到不同的分區中,從圖中可以看出,分區是可以重復利用的,後台有一個所謂的自動化切換分區的作業在跑,目的就是如果重復 利用這些分區。這里的PRIMARY目的就是說明它與其它文件組的一個平級關系,而且我們在做交換分區時候也會用到PRIMARY,需要事先分配足夠的空間; (圖2:自動化設計圖) 自動化切換分區作業的邏輯處理,其中分區管理表的設計是比較重要的,它的靈活度關繫到整個自動化的效果; 這個邏輯有以下幾個特點: 1、 分區的索引進行存儲位置對齊;其它索引在創建時就使用了分區方案,索引數據跟隨分區數據一起存儲在分區中; 2、分區管理表,包含了分區記錄數預警設計,在Id達到這個值後就會進行交換分區; 3、分區管理表,FileGroup_String欄位的數據可以通過SQL腳本自動化生成,條件就是分區文件組名稱需要有規律; 4、 臨時表是創建在PRIMARY主分區上,跟原表使用相同的分區方案;需要事先給PRIMARY分配大於或者等於一個分區文件大小的空間,這樣在交換分區的時候就不用增量為主分區分配數據空間; 5、 交換舊數據到臨時表,使用下面的語句可以把數據交換到相同的分區中編號,這樣可以應對臨時表就是一個歷史表,而好處就是歷史表也同樣使用了分區; ALTER TABLE [tb] SWITCH PARTITION @PARTITION_num TO [Temp_tb] 6、這里需要先修改分區方案,才能修改分區函數,這個跟創建分區函數與分區方案的順序是剛好相反的; 分區管理表(PartitionManage)是能應對比較多的情況: 1、 比如我們可以修改預警值(Change_Value),讓數據提早進入交換分區; 2、比如我們可以修改分區值(Part_Value),達到調整分區間隔的目的; 3、比如我們可以修改分區文件組名稱(FileGroup_String),達到跳級文件組的目的;通過修改分區管理表來設置分區值與分區文件組的對應關系; 4、再比如,我們一次性修改了分區方案和分區函數,已經去到很後面的分區值了,那麼我們只要設置這些分區值的狀態(IsDone)為1(True)就可以解決; 5、記錄了進行交換分區的時間(UpdateTime),方便查詢; 不知道朋友們看到這個標題是會陌生還是熟悉呢?今天帶大家一起看看一起介紹下SQL Server自動化管理分區設計方案; 一、設計說明 設計這個自動化的目的是想要交替、重復地使用固定的幾個分區(分區編號01~05)來保存數據,當最後一個分區就是快滿的時候,我們會把最舊數據的分區的數據清空出分區,新數據就可以使用老分區空間了; 應用這個自動化管理分區的環境是有些限制的; 其一:分區的數據是呈現遞增的,比如分區欄位是自增Id值,或者是以日期作為分區; 其二:可以接受歷史 數據被移除分區表帶來的問題; 其三:一天進庫的數量不應大於分區管理表PartitionManage中Part_Value與Change_Value 的差,因為我們作業執行的頻率是1天,不過你可以調整Change_Value或者作業的執行頻率;二、看圖說話
『叄』 SQL Server 自動化管理分區設計方案
一 設計說明
設計這個自動化的目的是想要交替 重復地使用固定的幾個分區(分區編號 ~ )來保存數據 當最後一個分區就是快滿的時候 我們會把最舊數據的分區的數據清空出分區 新數據就可以使用老分區空間了
應用這個自動化管理分區的環境是有些限制的 其一 分區的數據是呈現遞增的 比如分區欄位是自增Id值 或者是以日期作為分區;其二 可以接受 歷史數據被移除分區表帶來的問題 其三 一天進庫的數量不應大於分區管理表PartitionManage中Part_Value與 Change_Value的差 因為我們作業執行的頻率是 天 不過你可以調整Change_Value或者作業的執行頻率;
具體腳本可以參考 SQL Server 自動化刪除表分區設計方案
二 看圖說話
(圖 整體概念圖)
數據流經過分區方案 被分配到不同的分區中 從圖中可以看出 分區是可以重復利用的 後台有一個所謂的自動化切換分區的作業在跑 目的就是如果 重復利用這些分區 這里的PRIMARY目的就是說明它與其它文件組的一個平級關系 而且我們在做交換分區時候也會用到PRIMARY 需要事先分配足夠 的空間
(圖 自動化設計圖)
這是自動化切換分區作業的邏輯處理 其中分區管理表的設計是比較重要的 它的靈活度關繫到整個自動化的效果; 這個邏輯有以下幾個特點
分區的索引進行存儲位置對齊;其它索引在創建時就陵孫咐使用了分區方案 索引數據跟隨分區數據一起存儲在分區中;
分區管理表 包含了分區記錄數預警設計 在Id達到這個值後凱櫻就會進行交換分區;
分區管理表 FileGroup_String欄位的數據可以通過SQL腳本自動化生成 條件就是分區文件組名稱需要有規律;
臨時表是創建在PRIMARY主分區上 跟原表使用相同的分區方案;需要事先給PRIMARY分配大於或者等於一個分區文件大小的空間 這樣在交換分區的時候就不用增量為主分區分配數據空間;
交換舊數據到臨時表 使用下面的語句可以把數據交換到相同的分區中編號 這樣可以應對臨時表就是一個歷史表 而好處就是歷史表也同樣使用了分區
ALTER TABLE [tb] SWITCH PARTITION @PARTITION_num TO [Temp_tb] PARTITION@PARTITION_num
這里需要先修改分區方案 才能修改分區函數 這個跟創建分區函數與分區方案的順序是剛好相反的
(圖 分區管理表PartitionManage)
欄位說明 Change_Value(預警Id值)Part_Value(分區函數值)FileGroup_String(分區文件組名稱)IsDone(狀態)UpdateTime(更新時間);
這就是那個分區管理表(PartitionManage) 它是經過了幾個版本後才把欄位確定下來的 現在它已經比較完善了 能應對比較多的情況
比如我們可以修改預警值(Change_Value) 讓數據提早進入交換分區;
比如我們可以修改分區值(Part_Value) 達到調整分區間隔的目的;
比如我們可以修改分區文件組名稱(FileGroup_String) 達到跳級文件組的目的;通過修改分區管理表來設置分區值與分區文件組的對應關系;
再比如 我們一次性修改了分區方案和分區函數 已經去到很後面的分區值了 那麼我們只要設置這些分區值的狀態(IsDone)為 (True)就可以解決了
記錄了進行交換分區的時間(UpdateTime) 方便查詢;
(圖 分區為Id欄位的記錄分布圖)
這是一個實戰中的分區情況 這樣的分區特點就是分區裡面的記錄數基本上是持平的 在Partition_num= 的記錄中明顯多了很多記錄 這就是因為我們沒有及時進行交換分區造成的
(圖 分尺純區為ClassId(分類)欄位的記錄分布圖)
lishixin/Article/program/SQLServer/201311/22352
『肆』 Oracle SQL調優之分區表
@[toc]
其它類型的表設計可以看博客: https://smilenicky.blog.csdn.net/article/details/90315980
普通表和分區表區別,分區表分成幾部分就有幾個segment,RANGE_PART_TAB是一個分區表
引用Oracle官方文檔的說法, https://docs.oracle.com/cd/B19306_01/server.102/b14220/partconc.htm#sthref2604 :
分區類型:分區分為范圍分區、列表分區、HASH分區、組合分區四種,圖來自Oracle官方網站
關鍵字partition by range
散列分區也叫hash分區,partitions後接分區數,盡量設置為物鉛偶數,
組合分區又稱復合分區,主要有兩種:oracle11之前只支持范圍列表分區(RANGE-LIST)和范圍散列分區(RANGE-HASH),oracle11之後支持(范圍范圍分區)RANGE-RANGE、 (列表范圍分區)LIST-RANGE、(列表散列分區)LIST-HASH、(列表列表分區)LIST-LIST這幾種組合,為了避免每個主分區中都寫相同的從分區,可以旦螞慎用模板方式(subpartition template)
圖來模敬自Oracle官方網站:
新增子分區,子分區名稱是P13SUB1
刪除子分區,子分區名稱P13SUB1
TRUNCATE子分區
分區相關查詢
ps:表格來自《收獲,不止SQL調優》一書作者的整理
『伍』 SQL 2005 如何按月把表分區
創建分碧缺區遲慧悔函數
按月區分的例子 (目前只有前3季度)
CREATE PARTITION FUNCTION sale_date_part_func(DATETIME)
AS RANGE RIGHT FOR VALUES(
CONVERT(DATETIME, '2010-01-01 00:00:00', 120),
CONVERT(DATETIME, '2010-02-01 00:00:00', 120),
CONVERT(DATETIME, '2010-03-01 00:00:00'碼正, 120),
CONVERT(DATETIME, '2010-04-01 00:00:00', 120),
CONVERT(DATETIME, '2010-05-01 00:00:00', 120),
CONVERT(DATETIME, '2010-06-01 00:00:00', 120),
CONVERT(DATETIME, '2010-07-01 00:00:00', 120),
CONVERT(DATETIME, '2010-08-01 00:00:00', 120),
CONVERT(DATETIME, '2010-09-01 00:00:00', 120)
);
go
創建分區架構(Schema)
CREATE PARTITION SCHEME sale_date_part_sche
AS PARTITION sale_date_part_func
TO (
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY], [PRIMARY], [PRIMARY],
[PRIMARY]
);
go
創建分區表
CREATE TABLE sale_data (
sale_date DATETIME NOT NULL ,
sale_item VARCHAR(2) NOT NULL ,
sale_money DECIMAL(10,2) NOT NULL
) ON sale_date_part_sche(sale_date);
go
『陸』 Spark-sql讀取hive分區表限制分區過濾條件及限制分區數量
在開發過程中使用spark去讀取hive分區表的過程中(或者使用hive on spark、nodepad開發工具),部分開發人員未注意添加分區屬性過濾導致在執行過程中載入了全量數據,引起任務執行效率低、磁碟IO大量損耗等問題
1、自定義規則CheckPartitionTable類,實現Rule
然後通過此種方法創建SparkSession
2、自定義規則CheckPartitionTable類,實現Rule,將規則類追加致Optimizer.batches: Seq[Batch]中
1、CheckPartitionTable規則執行類,需要通過引入sparkSession從而獲取到引入conf;需要繼承Rule[LogicalPlan];
2、通過splitPredicates方法,分離分區謂詞,得到分區謂詞表達式
在sql解析過程中將謂詞解析為TreeNode,此處採用遞歸的方式獲取分區謂詞
3、判斷是否是分區表,且是否添加分區欄位
4、實現Rule的apply方法
關於spark-sql的主要執行流程及預備知識,可參照我同學的這篇博文 https://www.jianshu.com/p/4cc6797fb9ce
『柒』 SQL 分區限制
select*fromtableAllwhere(class='01'andsex='男')orclass<>'01';
有問題再追問,望採納。
『捌』 SQLserver中分區與表的關系式什麼樣(我只知道表和構架之間的關系)
分區是表的物理特性,分區主要用來改善大型表以及具有各種訪問模式的表的可伸縮巧罩性高頃和可管理性,譬如每個每個分區可在不同硬碟上,孝念鬧可以並行訪問,對上層使用是透明的,不能手動指定把數據放在哪個分區,它得先定義規則(類似於case when),這個每種資料庫的語法不一樣。
『玖』 最近在研究SQL分區,想問問是不是只能針對表裡某個欄位分區,不能根據表名分區嗎,我的表名已經有日期
表名分區屬於彎轎 表空間,這個屬於數埋培肆據庫管理員的工作,我沒接觸過,所以也不知道怎麼搞。。
表內分區中散 應該是用一般的語句用partition by
『拾』 如何對一個已經存在的SQL Server表分區
有兩轎滾盯種方法可以實現對一個表分區.一是創建一個新閉和的標識為分區表的表(你可參照此步驟),然後把數據復制到這張新表,再對這兩張表分別改名.或者,像我寫在下面的,通過重建或創建一個聚集索引來達到分區一個表.
一個SQL Server表和數據進行分區示例
--Table/備緩Index creation
CREATE TABLE [dbo].[TABLE1]
([pkcol] [int] NOT NULL,
[datacol1] [int] NULL,
[datacol2] [int] NULL,
[datacol3] [varchar](50) NULL,
[partitioncol] datetime)
GO
ALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol)
GO
CREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]