Bagikan melalui


Filter Berparameter - Optimalkan untuk Partisi yang Telah Dikomputasi

Berlaku untuk: SQL Server

Partisi yang telah dikomputasi sebelumnya adalah pengoptimalan performa yang dapat digunakan dengan publikasi gabungan yang difilter. Partisi yang telah dikompilasi sebelumnya juga merupakan persyaratan untuk menggunakan rekaman logis pada publikasi yang difilter. Untuk informasi selengkapnya tentang rekaman logis, lihat Perubahan Grup pada Baris Terkait dengan Rekaman Logis.

Saat Pelanggan menyinkronkan dengan Penerbit, Penerbit harus mengevaluasi filter Pelanggan untuk menentukan baris mana yang termasuk dalam partisi Pelanggan tersebut, atau himpunan data. Proses penentuan keanggotaan partisi perubahan di Penerbit untuk setiap Pelanggan yang menerima himpunan data yang difilter disebut sebagai evaluasi partisi. Tanpa partisi yang telah dikomputasi sebelumnya, evaluasi partisi harus dilakukan untuk setiap perubahan yang dilakukan pada kolom yang difilter di Penerbit sejak terakhir kali Agen Penggabungan berjalan untuk Pelanggan tertentu, dan proses ini harus diulang untuk setiap Pelanggan yang disinkronkan dengan Penerbit.

Namun, jika Penerbit dan Pelanggan berjalan di Microsoft SQL Server 2005 (9.x) atau versi yang lebih baru dan Anda menggunakan partisi yang telah dikomputasi, keanggotaan partisi untuk semua perubahan di Penerbit telah dikomputasi dan dipertahankan pada saat perubahan dilakukan. Akibatnya, ketika Pelanggan menyinkronkan dengan Penerbit, pelanggan dapat segera mulai mengunduh perubahan yang relevan dengan partisinya tanpa harus melalui proses evaluasi partisi. Hal ini dapat menyebabkan peningkatan performa yang signifikan ketika publikasi memiliki sejumlah besar perubahan, Pelanggan, atau artikel dalam publikasi.

Selain menggunakan partisi yang telah dikomputasi sebelumnya, rekam jepret pra-hasil dan/atau memungkinkan Pelanggan untuk meminta pembuatan rekam jepret dan aplikasi saat pertama kali disinkronkan. Gunakan salah satu atau kedua opsi ini untuk menyediakan rekam jepret untuk publikasi yang menggunakan filter berparameter. Jika Anda tidak menentukan salah satu opsi ini, langganan diinisialisasi menggunakan serangkaian pernyataan SELECT dan INSERT, daripada menggunakan utilitas bcp ; proses ini jauh lebih lambat. Untuk informasi selengkapnya, lihat Rekam Jepret untuk Gabungkan Publikasi dengan Filter Berparameter.

Untuk menggunakan partisi yang telah dikomputasi sebelumnya

Partisi yang telah dikompilasi diaktifkan secara default pada semua publikasi baru dan yang sudah ada yang mematuhi pedoman yang dijelaskan di atas. Pengaturan dapat diubah melalui SQL Server Management Studio atau secara terprogram. Untuk informasi selengkapnya, lihat Mengoptimalkan Filter Baris Berparameter.

Persyaratan untuk Menggunakan Partisi yang Telah Dikomputasi

Jika persyaratan berikut terpenuhi, publikasi penggabungan baru adalah, secara default, dibuat dengan partisi yang telah dikomputasi diaktifkan, dan publikasi yang ada secara otomatis ditingkatkan untuk menggunakan fitur tersebut. Jika publikasi tidak memenuhi persyaratan, publikasi dapat diubah, dan kemudian partisi yang telah dikompilasi dapat diaktifkan. Jika beberapa artikel memenuhi persyaratan ini dan beberapa tidak, pertimbangkan untuk membuat dua publikasi, dengan satu artikel diaktifkan untuk partisi yang telah dikomputasi sebelumnya.

Persyaratan untuk Klausul Filter

  • Fungsi apa pun yang digunakan dalam filter baris berparameter, seperti HOST_NAME() dan SUSER_SNAME(), akan muncul langsung dalam klausul filter berparameter dan tidak disarangkan di dalam tampilan atau fungsi dinamis. Untuk informasi selengkapnya tentang fungsi-fungsi ini, lihat HOST_NAME (Transact-SQL), SUSER_SNAME (Transact-SQL), dan Filter Baris Berparameter.

  • Nilai yang dikembalikan untuk setiap Pelanggan tidak boleh berubah setelah partisi dibuat. Misalnya, jika Anda menggunakan HOST_NAME() dalam filter (dan tidak menimpa nilai HOST_NAME() tidak mengubah nama komputer di Pelanggan.

  • Filter gabungan tidak boleh berisi fungsi dinamis (fungsi seperti HOST_NAME() dan SUSER_SNAME() yang mengevaluasi ke nilai yang berbeda tergantung pada Pelanggan yang disinkronkan). Hanya filter baris berparameter yang harus berisi fungsi dinamis.

  • Fungsi nondeterministik tidak dapat digunakan dalam klausa filter. Untuk informasi selengkapnya tentang fungsi nondeterministik, lihat Fungsi Deterministik dan Nondeterministik.

  • Tampilan yang dirujuk dalam klausa filter gabungan atau klausa filter berparameter tidak boleh berisi fungsi dinamis.

  • Seharusnya tidak ada hubungan filter gabungan melingkar dalam publikasi.

Kolase Database

  • Ketika partisi yang telah dikomputasi digunakan, kolase database selalu digunakan saat membuat perbandingan, bukan kolase tabel atau kolom. Pertimbangkan skenario berikut:

    • Database dengan kolater peka huruf besar/kecil berisi tabel dengan kolater yang tidak peka huruf besar/kecil.

    • Tabel berisi kolom ComputerName, yang dibandingkan dengan nama host Pelanggan dalam filter berparameter.

    • Tabel berisi satu baris dengan nilai "MYCOMPUTER" dan satu baris dengan nilai "mycomputer" di kolom ini.

    Jika Pelanggan menyinkronkan dengan nama host "mycomputer", Pelanggan hanya menerima satu baris karena perbandingan peka huruf besar/kecil (kolase database). Jika partisi yang telah dikomputasi sebelumnya tidak digunakan, Pelanggan menerima kedua baris, karena tabel memiliki kolase yang tidak peka huruf besar/kecil.

Performa Partisi yang Telah Dikomputasi

Ada biaya performa kecil dengan partisi yang telah dikomputasi ketika perubahan diunggah dari Pelanggan ke Penerbit, tetapi sebagian besar waktu pemrosesan penggabungan dihabiskan untuk mengevaluasi partisi dan mengunduh perubahan dari Penerbit ke Pelanggan, sehingga keuntungan bersih masih dapat signifikan. Keuntungan performa akan bervariasi, tergantung pada jumlah Pelanggan yang disinkronkan secara bersamaan dan jumlah pembaruan per sinkronisasi yang memindahkan baris dari satu partisi ke partisi lainnya.

Lihat Juga

Filter Baris Berparameter