none
請教create partition scheme出現訊息 7707,層級 16,狀態 1,行 1錯誤問題 RRS feed

  • 問題

  • 請問各位高手,最近因為資料庫某個資料表過大,想要將它做partation切割動作,希望可以提昇效能,但是當我執行create partition function及filegroup都沒問題,但執行create partition scheme時會出現"訊息 7707,層級 16,狀態 1,行 1
    相關聯的資料分割函數 'pf_DateRange' 會產生比結構描述 'ps_DateRange' 中提及之檔案群組多的資料分割。"錯誤訊息,因為沒使用partition的功能,所以想請教各位,是那邊語法有下錯嗎?相關執行語法如下,拜託各位了,謝謝!!

    create partition function pf_Range1 (datetime)
    as range right for values ('2007/1/1', '2008/1/1','2009/1/1','2010/1/1')
    --create filegroup
    ALTER DATABASE test ADD FILEGROUP fg1
    ALTER DATABASE test ADD FILE (NAME = 'fg1', FILENAME = 'D:\MSSQL\test_fg1.NDF') TO FILEGROUP fg1
    ALTER DATABASE test ADD FILEGROUP fg2
    ALTER DATABASE test ADD FILE (NAME = 'fg2', FILENAME = 'D:\MSSQL\test_fg2.NDF') TO FILEGROUP fg2
    ALTER DATABASE test ADD FILEGROUP fg3
    ALTER DATABASE test ADD FILE (NAME = 'fg3', FILENAME = 'D:\MSSQL\test_fg3.NDF') TO FILEGROUP fg3
    ALTER DATABASE test ADD FILEGROUP fg4
    ALTER DATABASE test ADD FILE (NAME = 'fg4', FILENAME = 'D:\MSSQL\test_fg4.NDF') TO FILEGROUP fg4
    --create partition
    CREATE PARTITION SCHEME ps_Range
    AS PARTITION pf_Range1
    to (fg1, fg2, fg3,fg4)

     

    2010年12月6日 上午 09:51

解答

所有回覆

  • You need one more file group if don't want to share file group for 2 partitions.
    2010年12月6日 下午 02:39
  •   感謝您的指導,我的partition功能可以運作了,可是還是想再請教2個問題,第一個問題是我執行alter table pcprocessd DROP CONSTRAINT PK_pcprocessd WITH (MOVE TO ps_DateRange (dt_create)),我有去觀察filegroup的寫檔,我有2007年的資料,但為什麼他不是從fg1開始寫,而是從fg2開始寫檔呢?第2個問題是,如果同一個db我有其它大table也需要做partition,那先前create出來的這些filegroup可以再使用嗎??還是filegroup須要再create新的filegroup呢??麻煩您了,謝謝!!下列是我查詢partition及我實際table的筆數結果
    SELECT ps.partition_number
    ,ps.row_count
    FROM sys.dm_db_partition_stats ps
    INNER JOIN sys.partitions p
    ON ps.partition_id = p.partition_id
    AND p.[object_id] = OBJECT_ID('pcprocessd')
    partition_number row_count
    1 0
    2 1278838
    3 1952930
    4 2922009
    5 3503720
    1 9657497
    1 9657497

    select left(convert(varchar,dt_create,112),4),count(dt_create)
    from pcprocessd
    group by left(convert(varchar,dt_create,112),4)
    order by left(convert(varchar,dt_create,112),4)
    年度 筆數
    2007 1278838
    2008 1952930
    2009 2922009
    2010 3503720

    2010年12月7日 上午 02:09
  • 1. you use right boundary in partition function, sql will put all rows earlier than 2007/1/1 in fg1.

    2. you can share file group for multiple tables, but think about restore process. You can't only restore certain partition of specific table if share file group. 

    2010年12月7日 上午 03:24
  • 1.create partiton function就要去考慮資料分布的狀況了(預設為left),更詳細可以參考連結的範例

    CREATE PARTITION FUNCTION (Transact-SQL)

    http://msdn.microsoft.com/zh-tw/library/ms187802.aspx#BKMK_examples

     

    2.無需再建立額外filegroup。



    2010年12月8日 下午 12:16
    版主