修正: 在 SQL Server 2014 columnstore 叢集的索引的查詢中的部份結果

請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。

按一下這裡查看此文章的英文版本:3067257
本文將告訴您在 Microsoft SQL Server 2014 columnstore 叢集的索引的查詢過程中發生的問題。這篇文章提供 解析度 這個問題。
結論
當您使用掃描在 Microsoft SQL Server 2014年 columnstore 叢集的索引的查詢時,您可能在極少數的情況下收到部分的查詢結果。

執行下列作業時,就會發生這個問題。
步驟 1
[[插入] 或 [大量插入有] 的異動性 SQL 陳述式會將資料插入資料表有叢集索引 columnstore。這項操作,將套用下列條件:
  • 當考慮改用 SQL 陳述式到達 rowgroup 臨界值時,它會關閉 rowgroup R1 具有區段 S1。
  • 區段 S1 指向本機字典 D1。
  • 陳述式延續插入新的 rowgroup R2 的列。
  • 當關閉 rowgroup R1 時,本機字典 D1 也沒有關閉。如果字典 D1 仍有可用空間,您可以保持其開啟狀態,並使用新的 rowgroup R2。
步驟 2
如果考慮改用 SQL 陳述式已異常終止,或取消之前,它會關閉新的 rowgroup R2,便會套用下列條件:
  • Columnstore 中繼資料變更發生在認可外部交易獨立的 subtransactions。
  • 此時,R1 持續發生 「 正在建構中"或不可見狀態和區段 S1 系統資料表中的 rowgroup 參考字典 D1。
  • 沒有建立字典 D1 系統資料表中資料列。這是因為考慮改用 SQL 陳述式永遠不會有機會關閉現有的資料列。因此,持續存在,現有的資料列。
步驟 3
在一般情況下,如果有序元組搬運背景工作啟動不可見的 rowgroup R1] 及 [線段 S1,考慮改用 SQL 陳述式結束後,會移除背景工作。如果新的考慮改用 SQL 陳述式現在就開始,並建立具有新的區段需要新的本機字典的 S3 R3 rowgroup,您無法重複使用字典 D1 的內部 ID。這是因為 columnstore 的記憶體內部狀態會持續追蹤的字典所使用的識別碼。因此,區段 S3 將參考新的字典 D2。

注意在這個步驟中的條件是常見的條件。因此,就會不發生任何損毀。
步驟 4
如果 SQL Server 會失去於記憶體中的狀態字典 D1 之前有序元組搬運工作才會生效 (和執行步驟 3 中所述),則會發生本文所述的問題。

注意事項
  • 這個事件發生的原因可能是下列之一:
    • SQL Server 遇到記憶體多載,並於記憶體中的內容 D1 會從記憶體中收回的字典。
    • 重新啟動 SQL Server 的執行個體。
    • 包含 columnstore 叢集的索引的資料庫離線的時候,並再上線。
  • 其中一種這些事件之後發生,SQL Server 會重新載入記憶體中的結構沒有資料錄的字典 D1 和其內部識別碼存在。這是因為字典 D1 不會保留在系統資料表時考慮改用 SQL 陳述式已結束或 conceled。
  • 如果有序元組搬運背景工作的開始到目前為止,因為套用步驟 3 所述的條件,也會不發生任何錯誤。
  • 如果建立新的 rowgroup R3 時 (每個先前的項目符號項目) 的有序元組搬運背景工作啟動之前,SQL Server 會將相同的內部 ID 指派給新的字典 D1,然後它會參考 rowgroup R3 中的區段 S3 D1 字典。
  • 有序元組搬運背景工作啟動時在前一個動作之後,它卸除不可見的 rowgroup R1 加上新的字典 D1 及其區段 S1。這是因為該新字典 D1 和原始的字典 D1 S1 參考都相同,會將視為有序元組為止。

    注意這種情況發生時,就無法查詢 rowgroup R3 的內容。
解決方案
SQL Server 的第一次問題修正下列的累積更新中:


這個問題的修正程式也包含在下列的一般發行版本 (GDR) 更新:

SQL Server 2014 QFE 的安全性更新
這個更新還包含累積的更新 8、 此重要的修正程式,以及必要的 MS15-058 安全性更新。

SQL Server 2014 GDR 安全性更新
這個更新還包含此重要的修正程式,並透過 MS15-058 的累積安全性修正程式。

SQL Server 2014 Service Pack 1 GDR 的非安全性更新
這個更新還包含此重要修正程式。

關於 SQL Server 的累積更新

每個新的累積更新的 SQL Server 包含的所有 hotfix 與安全性修正,全都包含在先前的累積更新。如 SQL Server,請參閱 「 累計最新的更新 」:
其他相關資訊

錯誤訊息

在目前的受影響的資料庫中,如果您套用此修正程式之後,執行 DBCC CHECKDB 會收到下列錯誤訊息:
訊息 5289,層次 16,狀態 1,行 1
叢集的 columnstore 索引資料表上的 'cci'' t ' 有不符合在字典中的資料值的一或多個資料值。從備份中還原資料。

在目前的受影響的資料庫中,當您執行查詢,它會掃描受影響的資料表,您套用此修正程式之後,會收到下列錯誤訊息:
訊息 5288,層次 16,狀態 1,行 1
Columnstore 索引中有一或多個資料值不符合在字典中的資料值。請執行 DBCC CHECKDB,以取得其他資訊。

如果您收到這些錯誤,您可以節省大量的不受影響的資料行 rowgroups 的將資料匯出,然後卸除,或建立叢集的 columnstore 索引後,再重新載入資料的未損毀的資料。您應該啟用追蹤旗標 10207 来隱藏 5288 錯誤,並還原成舊行為的略過損毀的 rowgroups。

附註5288 和 5289 的錯誤訊息會產生具有區段 S3 R3 此 rowgroup。追蹤旗標 10207 用來擷取不會受到遺失字典 D1 的 rowgroup R3 區段。

受影響的資料庫的查詢

若要判斷是否包含 columnstore 索引的資料庫已經受到這個問題,請執行下列查詢:
select         object_name(i.object_id) as table_name,        i.name as index_name,        p.partition_number,        count(distinct s.segment_id) as damaged_rowgroups from        sys.indexes i        join sys.partitions p on p.object_id = i.object_id and p.index_id = i.index_id        join sys.column_store_row_groups g on g.object_id = i.object_id and g.index_id = i.index_id and g.partition_number = p.partition_number        join sys.column_store_segments s on s.partition_id = p.partition_id and s.segment_id = g.row_group_id where         i.type in (5, 6)        and s.secondary_dictionary_id <> -1         and g.state_description = 'COMPRESSED'        and s.secondary_dictionary_id not in        (               select dictionary_id from sys.column_store_dictionaries d               where d.hobt_id = p.hobt_id and d.column_id = s.column_id        ) group by         object_name(i.object_id),        i.name,        p.partition_number 

注意事項
  • 您必須對每個包含執行 SQL Server 的伺服器上的 columnstore 索引的資料庫執行這個查詢。空的結果集,表示資料庫不會受到影響。
  • 在期間內執行此查詢時都沒有活動將會建立新的 rowgroups,或變更現有的 rowgroups 的狀態。例如,下列的活動可以修改 rowgroups 的狀態: 建立索引、 索引重新組織、 大量插入、 有序元組搬運壓縮差異存放區。

    在執行查詢之前,您可以使用追蹤旗標 634 來停用背景的有序元組搬運工作。使用此命令來停用背景工作: DBCC TRACEON (634,-1)。查詢可讓您完成執行之後,請記得重新啟用 [使用] 指令的 [背景工作: DBCC TRACEOFF (634,-1)

    也請確定有執行此查詢時,請使用 columnstore 索引的資料表中插入資料沒有大量插入/BCP/選取執行命令。

    建議使用這些步驟來防止查詢傳回假象。
狀況說明
Microsoft 已確認這是<套用> 一節所列出的 Microsoft 產品的問題。

警告:本文為自動翻譯

內容

文章識別碼:3067257 - 最後檢閱時間:07/26/2015 08:11:00 - 修訂: 4.0

Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbsurveynew kbexpertiseadvanced kbfix kbmt KB3067257 KbMtzh
意見反應