Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Artikel ini membahas masalah yang terjadi selama kueri indeks columnstore kluster di Microsoft SQL Server 2014. Artikel ini menyediakan resolusi untuk masalah ini.

Ringkasan

Saat Anda menggunakan kueri yang memindai indeks columnstore kluster di Microsoft SQL Server 2014, Anda mungkin, di bawah kondisi langka, menerima hasil kueri parsial. Masalah ini terjadi ketika operasi berikut ini dijalankan.

Langkah 1

Pernyataan Transact-SQL [INSERT atau INSERT massal] menyisipkan data ke dalam tabel yang memiliki indeks columnstore kluster. Selama operasi ini, ketentuan berikut ini berlaku:

  • Ketika pernyataan Transact-SQL mencapai ambang batas rowgroup, maka menutup rowgroup R1 yang memiliki segmen S1.

  • Segmen titik S1 ke kamus lokal D1.

  • Pernyataan terus menyisipkan baris ke rowgroup baru R2.

  • Ketika rowgroup R1 tertutup, Kamus lokal D1 juga tidak harus ditutup. Jika Kamus D1 masih memiliki ruang yang tersedia, Anda bisa membiarkannya terbuka dan menggunakannya kembali untuk rowgroup R2 yang baru.

Langkah 2

Jika pernyataan Transact-SQL diakhiri secara tidak normal atau dibatalkan sebelum menutup rowgroup R2 yang baru, ketentuan berikut ini berlaku:

  • Perubahan metadata Columnstore terjadi dalam subtransaksi yang melakukan mandiri dari transaksi luar.

  • Pada titik ini, rowgroup R1 tetap ada di tabel sistem dalam tabel "di bawah konstruksi" atau tidak terlihat, dan segmen S1 referensi S1.

  • Tidak ada baris yang dibuat dalam tabel sistem untuk Kamus D1. Ini karena pernyataan Transact-SQL tidak pernah memiliki kesempatan untuk menutup baris yang sudah ada. Oleh karena itu, baris yang sudah ada masih ada.

Langkah 3

Dalam situasi umum, jika tugas latar belakang rangkap Mover dimulai setelah pernyataan Transact-SQL berakhir, tugas latar belakang menghapus rowgroup yang tidak 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 bisa menggunakan kembali ID internal dari kamus D1. Ini karena status dalam memori dari columnstore tetap melacak id kamus yang digunakan. Oleh karena itu, segmen S3 akan mereferensikan Kamus baru D2.Catatan Kondisi dalam langkah ini adalah kondisi umum. Oleh karena itu, tidak ada kerusakan.

Langkah 4

Jika SQL Server kehilangan status dalam memori dari kamus D1 sebelum tugas penggerak tupel berlaku (dan melakukan seperti yang diuraikan dalam langkah 3), masalah yang diuraikan dalam artikel ini terjadi.Catatan

  • Kejadian ini terjadi karena salah satu alasan berikut ini:

    • SQL Server mengalami overload memori, dan konten dalam memori Kamus D1 dihapus dari memori.

    • Contoh SQL Server dimulai ulang.

    • Database yang berisi indeks kluster columnstore menjadi offline lalu kembali online.

  • Setelah salah satu dari kejadian ini terjadi dan SQL Server memuat ulang struktur dalam memori, tidak ada catatan bahwa Kamus D1 dan ID internalnya ada. Ini karena Kamus D1 tidak dipertahankan dalam tabel sistem ketika pernyataan Transact-SQL telah dihentikan atau disisipkan.

  • Jika tugas latar belakang penggerak tupel dimulai pada saat ini, tidak terjadi kesalahan karena kondisi yang diuraikan dalam langkah 3 berlaku.

  • Jika rowgroup R3 baru dibuat sebelum tugas latar belakang rangkap Mover dimulai (per item poin sebelumnya), SQL Server menetapkan id internal yang sama ke kamus D1 baru, dan referensi TI Kamus D1 untuk segmen S3 dalam rowgroup R3.

  • Ketika tugas latar belakang penggerak tupel dimulai setelah tindakan sebelumnya, tetes tidak terlihat rowgroup R1 dan segmen S1 bersama-sama dengan kamus D1 yang baru. Hal ini terjadi karena penggerak rangkap menganggap bahwa Kamus D1 baru dan kamus asli D1 yang referensi S1 sama.Catatan Saat kondisi ini terjadi, Anda tidak dapat meminta konten dari rowgroup R3.

Pemecahan Masalah

Masalah ini pertama kali diperbaiki dalam pembaruan kumulatif berikut ini untuk SQL Server:

Pembaruan kumulatif 1 untuk SQL server 2014 SP1 pembaruan kumulatif 8 untuk SQL Server 2014Perbaikan untuk masalah ini juga disertakan dalam pembaruan Edaran Distribusi Umum (GDR) berikut ini:

Pembaruan keamanan untuk SQL Server 2014 QFE  Pembaruan ini mencakup pembaruan kumulatif 8, perbaikan penting ini, dan pembaruan keamanan MS15-058 yang diperlukan.Pembaruan keamanan untuk SQL Server 2014 GDR  Pembaruan ini menyertakan perbaikan penting perbaikan keamanan kumulatif ini melalui MS15-058.Pembaruan nonsecurity untuk SQL Server 2014 Paket Layanan 1 GDR  Pembaruan ini hanya menyertakan perbaikan penting ini.

Setiap pembaruan kumulatif 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 Selengkapnya

Pesan galatDalam database saat ini terpengaruh, jika Anda menjalankan DBCC CHECKDB setelah Anda menerapkan perbaikan ini, Anda menerima pesan kesalahan berikut:

MSG 5289, tingkat 16, negara bagian 1, baris 1 gugus columnstore kluster ' CCI ' pada tabel ' t ' memiliki satu atau beberapa nilai data yang tidak cocok dengan nilai data dalam kamus. Pulihkan data dari cadangan.

Dalam database yang saat ini terpengaruh, saat Anda menjalankan kueri yang memindai tabel yang terpengaruh setelah Anda menerapkan perbaikan ini, Anda menerima pesan kesalahan berikut:

Indeks MSG 5288, tingkat 16, negara bagian 1, baris 1 Columnstore memiliki satu atau beberapa nilai data yang tidak cocok dengan nilai data dalam kamus. Jalankan DBCC CHECKDB untuk informasi selengkapnya.

Jika Anda menerima kesalahan ini, Anda bisa menyimpan data yang tidak rusak secara massal mengekspor data kolom/rowgroups yang tidak terpengaruh lalu reload data setelah Anda menjatuhkan atau membuat indeks columnstore kluster. Anda harus mengaktifkan bendera pelacakan 10207 untuk menekan kesalahan 5288 dan kembali ke perilaku lama melewatkan grup rowgroups yang rusak. Catatan Pesan kesalahan 5288 dan 5289 dihasilkan untuk grup ini, R3 yang memiliki segmen S3. Bendera pelacakan 10207 digunakan untuk mengekstrak segmen rowgroup R3 yang tidak terpengaruh oleh Kamus D1 yang hilang.

Kueri untuk database yang terpengaruhUntuk menentukan apakah database yang berisi indeks columnstore sudah terpengaruh 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.

  • Jalankan kueri ini selama periode ketika tidak ada aktivitas yang akan membuat grup rowgroups baru atau mengubah status grup rowyang sudah ada. Misalnya, aktivitas berikut ini bisa mengubah status rowgroups: index Build, index menata ulang, sisipkan massal, penggerak rangkap memadatkan Delta. Sebelum Anda menjalankan kueri, Anda bisa menonaktifkan tugas rangkap Mover latar belakang dengan menggunakan bendera pelacakan 634. Gunakan perintah ini untuk menonaktifkan tugas latar belakang: DBCC TRACEON (634,-1). Setelah kueri selesai dijalankan, ingatlah untuk mengaktifkan kembali tugas latar belakang dengan menggunakan perintah: DBCC TRACEOFF (634,-1). Pastikan juga tidak ada perintah sisipkan/BCP/pilih-masuk massal yang menyisipkan data ke dalam tabel yang menggunakan indeks columnstore saat kueri ini berjalan. Sebaiknya gunakan langkah-langkah ini untuk mencegah kueri mengembalikan kesalahan positif.

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×