การแก้ไข: ผลลัพธ์บางส่วนในแบบสอบถามของดัชนีคลัสเตอร์ columnstore ใน 2014 ของเซิร์ฟเวอร์ SQL

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:3067257
บทความนี้กล่าวถึงปัญหาที่เกิดขึ้นในระหว่างการสอบถามของดัชนีคลัสเตอร์ columnstore ใน 2014 เซิร์ฟเวอร์ SQL ของ Microsoft บทความนี้ระบุถึง วิธีแก้ไขปัญหา ปัญหานี้
สรุป
เมื่อคุณใช้แบบสอบถามที่สแกนดัชนีคลัสเตอร์ columnstore ใน 2014 เซิร์ฟเวอร์ SQL ของ Microsoft คุณอาจ ภายใต้เงื่อนไขที่ไม่ค่อย ได้รับผลลัพธ์แบบสอบถามเป็นบางส่วน

ปัญหานี้เกิดขึ้นเมื่อรันการดำเนินการต่อไปนี้
ขั้นตอนที่ 1
คำสั่ง SQL คำสั่งกลุ่ม [INSERT หรือแทรกจำนวนมาก] แทรกข้อมูลลงในตารางที่มีดัชนี columnstore ในคลัสเตอร์ ในระหว่างการดำเนินงานนี้ ใช้เงื่อนไขต่อไปนี้:
  • เมื่อคำสั่ง SQL คำสั่งกลุ่มถึงขีดจำกัด rowgroup ปิด rowgroup R1 ที่มีเซ็กเมนต์ S1
  • เซ็กเมนต์ S1 ชี้ไปพจนานุกรมเฉพาะ D1
  • คำสั่งยังคงมีอยู่เมื่อต้องการแทรกแถวใหม่ rowgroup R2
  • เมื่อปิด rowgroup R1, D1 พจนานุกรมท้องถิ่นไม่มีจะปิด ถ้าพจนานุกรม D1 ยังคงมีเนื้อที่ที่มีอยู่ คุณสามารถปล่อยให้เปิด และนำมาใช้ใหม่สำหรับการ rowgroup ใหม่ R2
ขั้นตอนที่ 2
ถ้าคำสั่ง SQL คำสั่งกลุ่มจะสิ้นสุดลงอย่างผิดปกติ หรือถูกยกเลิกก่อนที่จะปิดการ rowgroup ใหม่ R2 ใช้กับเงื่อนไขต่อไปนี้:
  • การเปลี่ยนแปลงข้อมูลเมตาของ Columnstore เกิดขึ้นในธุรกรรมย่อยที่ยอมรับอย่างเป็นอิสระจากภายนอกธุรกรรม
  • ณจุดนี้ rowgroup R1 ยังคงมีอยู่ในตารางระบบในการ "ภาย ใต้การก่อสร้าง" หรือรัฐที่มองไม่เห็น และเซกเมนต์ S1 อ้างอิงพจนานุกรม D1
  • ไม่มีแถวที่สร้างขึ้นในตารางระบบสำหรับพจนานุกรม D1 อยู่ เป็นเช่นนี้ เพราะคำสั่ง SQL คำสั่งกลุ่มไม่เคยมีโอกาสที่จะปิดแถวที่มีอยู่ ดังนั้น แถวที่มีอยู่ยังคงมีอยู่
ขั้นตอนที่ 3
ในสถานการณ์ปกติ ถ้างาน tuple mover พื้นหลังเริ่มต้นหลังจากสิ้นสุดคำสั่ง SQL คำสั่งกลุ่ม งานพื้นหลังเอา rowgroup มองไม่เห็น R1 และ S1 เซ็กเมนต์ ถ้าคำสั่ง SQL คำสั่งกลุ่มใหม่จะเริ่มต้นในขณะนี้ และสร้าง rowgroup R3 ที่มีเซ็กเมนต์ใหม่ S3 ที่ต้องใช้พจนานุกรมท้องถิ่นใหม่ คุณไม่สามารถใช้รหัสภายในของพจนานุกรม D1 ทั้งนี้เนื่องจากที่เก็บของรัฐในหน่วยความจำของ columnstore รหัสที่ใช้ในพจนานุกรม ดังนั้น เซ็กเมนต์ S3 จะอ้างอิงพจนานุกรมใหม่ D2

หมายเหตุ เงื่อนไขในขั้นตอนนี้เป็นเงื่อนไขทั่วไป ดังนั้น จึง ไม่เกิดความเสียหาย
ขั้นตอนที่ 4
ถ้าเซิร์ฟเวอร์ SQL สูญเสียสถานะในหน่วยความจำของพจนานุกรม D1 ก่อนที่จะมีผลบังคับงาน mover ทูเปิล (และดำเนินการตามที่อธิบายไว้ในขั้นตอนที่ 3), ปัญหาที่อธิบายไว้ในบทความนี้เกิดขึ้น

หมายเหตุ
  • เหตุการณ์นี้เกิดขึ้นเนื่องจากสาเหตุใดสาเหตุต่อไปนี้:
    • SQL Server ประสบการณ์มากเกินหน่วยความจำ และเนื้อหาในหน่วยความจำของพจนานุกรม D1 จะเอาจากหน่วยความจำ
    • อินสแตนซ์ของ SQL Server จะเริ่มต้นใหม่แล้ว
    • ฐานข้อมูลที่ประกอบด้วยดัชนีคลัสเตอร์ columnstore ต่อออฟไลน์ และมาออนไลน์
  • หลังจากหนึ่งเหตุการณ์เหล่านี้เกิดขึ้น และ SQL Server reloads โครงสร้างในหน่วยความจำ ไม่มีระเบียนที่พจนานุกรม D1 และภายในของรหัสที่มีอยู่แล้ว ที่เป็นเช่นนี้เนื่องจากพจนานุกรม D1 ไม่ถูกเก็บไว้ในตารางระบบเมื่อสิ้นสุดคำสั่ง SQL คำสั่งกลุ่มหรือ conceled
  • ถ้างาน tuple mover พื้นหลังเริ่มต้นณจุดนี้ ไม่มีข้อผิดพลาดเกิดขึ้นเนื่องจากใช้เงื่อนไขที่อธิบายไว้ในขั้นตอนที่ 3
  • ถ้า rowgroup R3 ตัวใหม่ถูกสร้างขึ้นก่อนเริ่มงานพื้นหลัง mover ทูเปิล (ต่อรายการสัญลักษณ์หัวข้อย่อยก่อนหน้า), SQL Server กำหนดหมายเลขภายในที่เดียวกันในการสร้างพจนานุกรม D1 และพจนานุกรม D1 สำหรับเซ็กเมนต์ S3 ใน rowgroup R3 อ้างอิงถึง
  • เมื่องาน tuple mover พื้นหลังเริ่มต้นหลังจากการดำเนินการก่อนหน้า กระทั่งมองไม่เห็น rowgroup R1 และของเซ็กเมนต์ S1 ร่วมกับพจนานุกรมใหม่ D1 เหตุการณ์นี้เกิดขึ้นเนื่องจาก mover tuple ที่พิจารณาสร้างพจนานุกรมนั้น D1 และพจนานุกรม D1 ว่า อ้างอิง S1 จะเหมือนเดิม

    หมายเหตุ เมื่อเงื่อนไขนี้เกิดขึ้น คุณไม่สามารถสอบถามเนื้อหาของ rowgroup R3
การแก้ไข
ปัญหาถูกแก้ไขในโปรแกรมปรับปรุงสะสมต่อไปนี้ก่อนสำหรับ SQL Server:


การแก้ไขสำหรับปัญหานี้จะรวมอยู่ในการปรับปรุงการนำออกใช้ (GDR) กระจายทั่วไปต่อไปนี้:

ปรับปรุงการรักษาความปลอดภัยสำหรับ QFE 2014 ของเซิร์ฟเวอร์ SQL
โปรแกรมปรับปรุงนี้รวมถึง 8 ที่ปรับปรุงสะสม แก้ไขนี้สำคัญ และปรับปรุงความปลอดภัย MS15-058 จำเป็น

ปรับปรุงการรักษาความปลอดภัยสำหรับ GDR 2014 ของเซิร์ฟเวอร์ SQL
การปรับปรุงนี้มีโปรแกรมแก้ไขนี้สำคัญ และแก้ไขการรักษาความปลอดภัยผ่าน MS15-058

อัพเดต nonsecurity สำหรับ GDR Service Pack 2014 1 ที่เซิร์ฟเวอร์ SQL
การปรับปรุงนี้มีเฉพาะสิ่งสำคัญการแก้ไขนี้

เกี่ยวกับการปรับปรุงสะสมสำหรับ SQL Server

แต่ละโปรแกรมปรับปรุงสะสมใหม่สำหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และทั้งหมดที่แก้ไขความปลอดภัยที่ถูกรวมอยู่ในการปรับปรุงที่สะสมก่อนหน้านี้ ดูการปรับปรุงสะสมล่าสุดสำหรับ SQL Server:
ข้อมูลเพิ่มเติม

ข้อผิดพลาด

ในฐานข้อมูลที่ได้รับผลกระทบในขณะนี้ ถ้าคุณเรียกใช้การ DBCC CHECKDB หลังจากใช้โปรแกรมแก้ไขนี้ คุณได้รับตามข้อความแสดงข้อผิดพลาด:
ข่าวสารเกี่ยวกับ 5289 ระดับ 16 สถานะ 1 บรรทัด 1
Columnstore ภูมิดัชนี 'cci' บนตาราง 'ะ ' มีอย่าง น้อยหนึ่งค่าข้อมูลที่ไม่ตรงกับค่าข้อมูลในพจนานุกรม กู้คืนข้อมูลจากสำเนาสำรอง

ในฐานข้อมูลที่ได้รับผลกระทบในขณะนี้ เมื่อคุณเรียกใช้แบบสอบถามที่สแกนตารางได้รับผลกระทบหลังจากใช้โปรแกรมแก้ไขนี้ คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
ข่าวสารเกี่ยวกับ 5288 ระดับ 16 สถานะ 1 บรรทัด 1
ดัชนี Columnstore มีอย่าง น้อยหนึ่งค่าข้อมูลที่ไม่ตรงกับค่าข้อมูลในพจนานุกรม โปรดเรียกใช้ DBCC CHECKDB สำหรับรายละเอียดเพิ่มเติม

ถ้าคุณได้รับข้อผิดพลาดเหล่านี้ คุณสามารถบันทึกข้อมูลปรณ์ โดยจำนวนมากในการส่งออกข้อมูลของ คอลัมน์/rowgroups รับผลกระทบ และจากนั้น โหลดข้อมูลหลังจากที่คุณวาง หรือสร้างดัชนีคลัสเตอร์ columnstore คุณควรเปิดใช้งานการสืบค้นกลับค่าสถานะ 10207 เพื่อระงับข้อผิดพลาด 5288 และแปลงกลับเป็นลักษณะการทำงานเดิมของ rowgroups เสียหายข้าม

หมายเหตุ ข้อผิดพลาด 5288 และ 5289 จะถูกสร้างขึ้นสำหรับ rowgroup นี้ R3 ที่มีเซ็กเมนต์ S3 แฟล็กการติดตาม 10207 ถูกใช้เพื่อแยกเซ็กเมนต์ของ rowgroup R3 ที่ไม่ได้รับผลกระทบ โดยในพจนานุกรม D1 ขาดหายไป

แบบสอบถามสำหรับฐานข้อมูลที่ได้รับผลกระทบ

การตรวจสอบว่า ฐานข้อมูลที่ประกอบด้วยดัชนี 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 

หมายเหตุ
  • คุณต้องเรียกใช้แบบสอบถามนี้กับฐานข้อมูลทั้งหมดที่ประกอบด้วย columnstore ดัชนีบนเซิร์ฟเวอร์ที่กำลังเรียกใช้ SQL Server มีชุดผลลัพธ์ที่ว่างบ่งชี้ว่า ฐานข้อมูลจะไม่ได้รับผลกระทบ
  • ดำเนินการแบบสอบถามนี้ในระหว่างรอบระยะเวลาไม่มีกิจกรรมที่จะสร้าง rowgroups ใหม่ หรือเปลี่ยนสถานะของ rowgroups ที่มีอยู่ ตัวอย่างเช่น กิจกรรมต่อไปนี้สามารถปรับเปลี่ยนสถานะของ rowgroups: สร้างดัชนี การจัดระเบียบดัชนี การแทรกจำนวนมาก mover ทูเปิลบีบอัดร้านค้าส่วนที่แตกต่างกัน

    ก่อนที่คุณดำเนินการแบบสอบถาม คุณสามารถปิดใช้งาน mover ทูเปิลพื้นหลัง โดยใช้แฟล็กการติดตาม 634 ใช้คำสั่งนี้เพื่อปิดการใช้งานพื้นหลัง: DBCC TRACEON (634, -1) หลังจากการสอบถามเสร็จสิ้นการดำเนินการ อย่าลืมเปิดใช้งานพื้นหลัง โดยใช้คำสั่ง: TRACEOFF DBCC (634, -1)

    นอกจากนี้ ตรวจสอบว่า มีไม่มีจำนวนมาก แทรก/BCP/เลือก ลงในคำสั่งการแทรกข้อมูลลงในตารางที่ใช้ดัชนี columnstore ในขณะที่กำลังเรียกใช้แบบสอบถามนี้

    แนะนำให้ใช้ขั้นตอนเหล่านี้เพื่อป้องกันไม่ให้แบบสอบถามส่งกลับเท็จทำงานผิดพลาด
สถานะ
Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 3067257 - การตรวจสอบครั้งสุดท้าย: 07/26/2015 07:56:00 - ฉบับแก้ไข: 3.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 KbMtth
คำติชม