MEMPERBAIKI: Parsial hasil kueri indeks kluster columnstore di SQL Server 2014

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 3067257
Artikel ini membahas masalah yang terjadi selama permintaan indeks kluster columnstore di Microsoft SQL Server 2014. Artikel ini menyediakan pemecahan masalah masalah ini.
Ringkasan
Ketika Anda menggunakan permintaan yang memindai indeks kluster columnstore di Microsoft SQL Server 2014, Anda mungkin, di bawah kondisi yang jarang terjadi, menerima hasil kueri sebagian.

Masalah ini terjadi saat operasi berikut ini dijalankan.
Langkah 1
Pernyataan Transact-SQL [sisipkan atau masukkan massal] memasukkan data ke Daftar Tabel yang memiliki gugus columnstore indeks. Selama operasi ini, kondisi berikut ini berlaku:
  • Ketika pernyataan Transact-SQL mencapai ambang rowgroup, menutup rowgroup R1 yang memiliki segmen S1.
  • Segmen titik S1 lokal Kamus D1.
  • Pernyataan terus memasukkan baris yang baru rowgroup R2.
  • Ketika rowgroup R1 tertutup, Kamus lokal D1 tidak juga harus ditutup. Jika Kamus D1 masih memiliki ruang yang tersedia, Anda dapat membiarkan terbuka dan menggunakannya untuk rowgroup baru R2.
Langkah 2
Jika pernyataan Transact-SQL berakhir normal atau dibatalkan sebelum menutup rowgroup baru R2, kondisi berikut ini berlaku:
  • Columnstore metadata perubahan terjadi di subtransactions yang melakukan secara terpisah dari luar transaksi.
  • Pada titik ini, rowgroup R1 tetap ada di dalam Daftar Tabel sistem "di bawah konstruksi" atau status tidak terlihat, dan segmen S1 referensi Kamus D1.
  • Ada tidak ada baris yang dibuat di Daftar Tabel sistem untuk Kamus D1. Hal ini karena pernyataan Transact-SQL tidak pernah memiliki kesempatan untuk menutup baris yang sudah ada. Oleh karena itu, ada baris masih terjadi.
Langkah 3
Dalam situasi khas, jika tupel penggerak latar belakang dimulai setelah pernyataan Transact-SQL berakhir, latar belakang menghapus rowgroup terlihat R1 dan segmen S1. Jika pernyataan Transact-SQL baru dimulai sekarang dan membuat rowgroup R3 yang memiliki segmen baru S3 yang memerlukan Kamus lokal baru, Anda tidak dapat menggunakan kembali ID internal Kamus D1. Hal ini karena kondisi di kehabisan memori columnstore Simpan tentang kamus id yang digunakan. Oleh karena itu, segmen S3 akan referensi baru Kamus D2.

Catatan Kondisi pada langkah ini adalah kondisi yang umum. Oleh karena itu, tidak ada kerusakan terjadi.
Langkah 4
Jika SQL Server kehilangan status dalam kehabisan memori Kamus D1 sebelum tupel penggerak tugas akan diterapkan (dan berfungsi seperti yang dijelaskan di langkah 3), terjadi masalah yang dijelaskan di artikel ini.

Catatan
  • Peristiwa ini terjadi karena salah satu dari alasan berikut ini:
    • SQL Server mengalami kelebihan kehabisan memori, dan konten dalam kehabisan memori Kamus D1 dihapus dari kehabisan memori.
    • Contoh SQL Server di-restart.
    • Pangkalan data yang berisi indeks kluster columnstore pergi offline dan kemudian muncul kembali online.
  • Setelah salah satu dari peristiwa ini terjadi dan SQL Server ulang struktur dalam kehabisan memori, ada catatan yang Kamus D1 dan yang internal ID yang ada. Hal ini karena Kamus D1 tidak dipertahankan dalam Daftar Tabel sistem ketika pernyataan Transact-SQL berakhir atau pengurus wilayah.
  • Jika tupel penggerak latar belakang dimulai pada titik ini, tidak ada kesalahan terjadi karena kondisi yang dijelaskan di langkah 3 berlaku.
  • Jika rowgroup baru R3 dibuat sebelum dimulai tupel penggerak latar belakang (per item poin sebelumnya), SQL Server menetapkan ID internal yang sama baru Kamus D1, dan referensi Kamus D1 untuk segmen S3 di rowgroup R3.
  • Ketika tupel penggerak latar belakang dimulai setelah tindakan sebelumnya, tetes tidak terlihat rowgroup R1 dan segmen S1 bersama-sama dengan baru Kamus D1. Ini terjadi karena penggerak tupel menganggap bahwa baru Kamus D1 dan kamus asli D1 S1 referensi yang sama.

    Catatan Apabila kondisi ini terjadi, Anda tidak dapat meminta konten rowgroup R3.
Pemecahan masalah
Masalah pertama kali diperbaiki dalam pemutakhiran kumulatif berikut ini untuk SQL Server:


Perbaikan untuk masalah ini juga termasuk dalam pembaruan rilis (GDR) Distribusi Umum berikut ini:

Pembaruan keamanan untuk SQL Server 2014 QFE
Pemutakhiran ini mencakup pembaruan kumulatif 8, perbaikan ini penting dan pemutakhiran keamanan MS15 058 yang diperlukan.

Pembaruan keamanan untuk SQL Server 2014 GDR
Pemutakhiran ini menyertakan perbaikan penting dan perbaikan keamanan kumulatif melalui MS15 058.

Nonsecurity pemutakhiran untuk SQL Server 2014 Service Pack 1 GDR
Pemutakhiran ini mencakup hanya perbaikan ini penting.

Tentang pembaruan kumulatif untuk SQL Server

Setiap pembaruan kumulatif yang baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:
Informasi lebih lanjut

Pesan galat

Dalam Pangkalan data saat ini terpengaruh, jika Anda menjalankan DBCC CHECKDB setelah Anda menerapkan perbaikan ini, Anda menerima pesan galat berikut:
MSG 5289, tingkat 16, negara bagian 1, baris 1
Kluster columnstore indeks 'cci' pada Daftar Tabel 't' memiliki satu atau lebih nilai data yang tidak cocok nilai data di dalam kamus. Memulihkan data dari cadangan.

Dalam database terpengaruh saat ini, saat menjalankan permintaan yang memindai Daftar Tabel terpengaruh setelah Anda menerapkan perbaikan ini, Anda menerima pesan galat berikut:
MSG 5288, tingkat 16, negara bagian 1, baris 1
Indeks Columnstore memiliki satu atau lebih nilai data yang tidak cocok nilai data di dalam kamus. Jalankan DBCC CHECKDB untuk informasi lebih lanjut.

Jika Anda menerima galat ini, Anda dapat menyimpan uncorrupted data secara massal mengekspor data kolom/rowgroups tidak terpengaruh dan kemudian reload data setelah Anda jatuh atau membuat kluster columnstore indeks. Anda harus mengaktifkan bendera pelacakan 10207 menekan 5288 galat dan kembali ke perilaku lama melewatkan rowgroups rusak.

Catatan Pesan galat 5288 dan 5289 dibuat untuk ini rowgroup R3 yang memiliki segmen S3. Bendera pelacakan 10207 digunakan untuk mengekstrak segmen rowgroup R3 yang tidak dipengaruhi oleh Kamus hilang D1.

Permintaan untuk terpengaruh database

Untuk menentukan apakah pangkalan data yang berisi indeks columnstore telah dipengaruhi oleh masalah ini, jalankan kueri berikut ini:
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 

Catatan
  • Anda harus menjalankan kueri ini terhadap setiap database yang berisi columnstore indeks di server yang menjalankan SQL Server. Rangkaian hasil kosong menunjukkan bahwa database tidak terpengaruh.
  • Eksekusi query ini selama periode ketika ada tidak ada aktivitas yang akan membuat rowgroups baru atau mengubah status rowgroups yang sudah ada. Sebagai contoh, kegiatan berikut ini dapat mengubah status rowgroups: pembuatan indeks, indeks reorganisasi, masukkan massal tupel penggerak mengompresi delta toko.

    Sebelum Anda menjalankan permintaan Anda dapat menonaktifkan latar belakang tupel penggerak tugas dengan menggunakan bendera pelacakan 634. Gunakan perintah ini untuk menonaktifkan latar belakang: DBCC TRACEON (634, -1). Setelah permintaan selesai eksekusi, ingat untuk mengaktifkan ulang di latar belakang dengan menggunakan perintah: DBCC TRACEOFF (634, -1).

    Selain itu, pastikan ada tidak ada massal INSERT/BCP/pilih-ke perintah memasukkan data ke Daftar Tabel yang menggunakan indeks columnstore ketika permintaan ini berjalan.

    Disarankan menggunakan langkah-langkah ini untuk mencegah permintaan kembali positif palsu.
Status
Microsoft telah memastikan bahwa ini merupakan masalah di dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 3067257 - Tinjauan Terakhir: 07/23/2015 02:38:00 - Revisi: 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 KbMtid
Tanggapan