Bagikan melalui


Meningkatkan Performa Indeks Full-Text

Performa untuk pengindeksan teks lengkap dan kueri teks lengkap dipengaruhi oleh sumber daya perangkat keras, seperti memori, kecepatan disk, kecepatan CPU, dan arsitektur komputer.

Penyebab Umum Masalah Performa

Penyebab utama berkurangnya performa pengindeksan teks lengkap adalah batas sumber daya perangkat keras:

  • Jika penggunaan CPU oleh proses host daemon filter (fdhost.exe) atau proses SQL Server (sqlservr.exe) mendekati 100 persen, CPU adalah hambatan.

  • Jika panjang antrean menunggu disk rata-rata lebih dari dua kali jumlah kepala disk, ada hambatan pada disk. Solusi utamanya adalah membuat katalog teks lengkap yang terpisah dari file dan log database SQL Server. Letakkan log, file database, dan katalog teks lengkap pada disk terpisah. Membeli disk yang lebih cepat dan menggunakan RAID juga dapat membantu meningkatkan performa pengindeksan.

  • Jika ada kekurangan memori fisik (batas 3 GB), memori mungkin menjadi hambatan. Batasan memori fisik dimungkinkan pada semua sistem, dan pada sistem 32-bit, tekanan memori virtual dapat memperlambat pengindeksan teks penuh.

    Catatan

    Dimulai di SQL Server 2008, Mesin Teks-Penuh dapat menggunakan memori AWE karena Mesin Teks-Penuh adalah bagian dari sqlservr.exe.

Jika sistem tidak memiliki hambatan perangkat keras, performa pengindeksan pencarian teks lengkap sebagian besar tergantung pada hal berikut:

  • Berapa lama waktu yang dibutuhkan SQL Server untuk membuat batch teks lengkap.

  • Seberapa cepat daemon filter dapat mengonsumsi batch tersebut.

Catatan

Tidak seperti populasi penuh, populasi pelacakan perubahan bertahap, manual, dan otomatis tidak dirancang untuk memaksimalkan sumber daya perangkat keras untuk mencapai kecepatan yang lebih cepat. Oleh karena itu, saran penyetelan ini mungkin tidak meningkatkan performa untuk pengindeksan teks lengkap.

Ketika populasi telah selesai, proses penggabungan akhir dipicu yang menggabungkan fragmen indeks bersama-sama menjadi satu indeks teks lengkap master. Ini menghasilkan peningkatan performa kueri karena hanya indeks master yang perlu dikueri daripada sejumlah fragmen indeks, dan statistik penilaian yang lebih baik dapat digunakan untuk peringkat relevansi. Perhatikan bahwa penggabungan master bisa intensif I/O, karena sejumlah besar data harus ditulis dan dibaca ketika fragmen indeks digabungkan, meskipun tidak memblokir kueri masuk.

Penting

Master menggabungkan sejumlah besar data dapat membuat transaksi yang berjalan lama, menunda pemotongan log transaksi selama titik pemeriksaan. Dalam hal ini, di bawah model pemulihan penuh, log transaksi mungkin tumbuh secara signifikan. Sebagai praktik terbaik, sebelum mengatur ulang indeks teks lengkap besar dalam database yang menggunakan model pemulihan penuh, pastikan bahwa log transaksi Anda berisi ruang yang cukup untuk transaksi yang berjalan lama. Untuk informasi selengkapnya, lihat Mengelola Ukuran File Log Transaksi.

Menyetel Performa Indeks Teks Lengkap

Untuk memaksimalkan performa indeks teks lengkap Anda, terapkan praktik terbaik berikut:

  • Untuk menggunakan semua prosesor atau inti secara maksimum, atur sp_configure'max full-text crawl ranges' ke jumlah CPU pada sistem. Untuk informasi tentang opsi konfigurasi ini, lihat Opsi Konfigurasi Server rentang perayapan teks lengkap maks.

  • Pastikan bahwa tabel dasar memiliki indeks berkluster. Gunakan jenis data bilangan bulat untuk kolom pertama indeks berkluster. Hindari menggunakan GUID di kolom pertama indeks berkluster. Populasi multi-rentang pada indeks berkluster dapat menghasilkan kecepatan populasi tertinggi. Kami menyarankan agar kolom yang berfungsi sebagai kunci teks lengkap adalah jenis data bilangan bulat.

  • Perbarui statistik tabel dasar dengan menggunakan pernyataan UPDATE STATISTICS. Lebih penting lagi, perbarui statistik pada indeks berkerumun atau kunci teks lengkap untuk seluruh populasi. Hal ini membantu populasi multi-rentang untuk menghasilkan partisi yang baik di atas meja.

  • Buat indeks sekunder pada timestamp kolom jika Anda ingin meningkatkan performa populasi bertambah bertahas.

  • Sebelum Anda melakukan populasi penuh pada komputer multi-CPU besar, kami sarankan Anda membatasi ukuran kumpulan buffer untuk sementara dengan mengatur max server memory nilai untuk meninggalkan cukup memori untuk proses fdhost.exe dan penggunaan sistem operasi. Untuk informasi selengkapnya, lihat "Memperkirakan Persyaratan Memori Proses Host Daemon Filter (fdhost.exe)," nanti dalam topik ini.

Pemecahan Masalah Performa Populasi Penuh

Untuk mendiagnosis masalah performa, lihat log perayapan teks lengkap. Untuk informasi tentang log perayapan, lihat Mengisi Indeks Teks Lengkap.

Disarankan agar urutan pemecahan masalah berikut diikuti jika performa populasi penuh tidak memuaskan.

Penggunaan Memori Fisik

Selama populasi teks lengkap, dimungkinkan bagi fdhost.exe atau sqlservr.exe kehabisan memori atau kehabisan memori. Jika log perayapan teks lengkap menunjukkan bahwa fdhost.exe sering dimulai ulang atau kode kesalahan tersebut 8007008 dikembalikan berarti salah satu proses ini kehabisan memori. Jika fdhost.exe memproduksi cadangan, terutama pada komputer multi-CPU besar, mungkin kehabisan memori.

Catatan

Untuk mendapatkan informasi tentang buffer memori yang digunakan oleh perayapan teks lengkap, lihat sys.dm_fts_memory_buffers (Transact-SQL).

Kemungkinan penyebabnya adalah sebagai berikut:

  • Jika jumlah memori fisik yang tersedia selama populasi penuh adalah nol, kumpulan buffer SQL Server mungkin mengonsumsi sebagian besar memori fisik pada sistem.

    Proses sqlservr.exe mencoba mengambil semua memori yang tersedia untuk kumpulan buffer, hingga memori server maksimum yang dikonfigurasi. max server memory Jika alokasi terlalu besar, kondisi kehabisan memori dan kegagalan untuk mengalokasikan memori bersama dapat terjadi untuk proses fdhost.exe.

    Catatan

    Selama populasi teks lengkap pada komputer multi-CPU, ketidakcocokan untuk memori kumpulan buffer dapat terjadi antara fdhost.exe atau sqlservr.exe. Kurangnya memori bersama yang dihasilkan menyebabkan percobaan ulang batch, pembatasan memori, dan cadangan oleh proses fdhost.exe.

    Anda dapat mengatasi masalah ini dengan mengatur max server memory nilai kumpulan buffer SQL Server dengan tepat. Untuk informasi selengkapnya, lihat "Memperkirakan Persyaratan Memori Proses Host Daemon Filter (fdhost.exe)," nanti dalam topik ini. Mengurangi ukuran batch yang digunakan untuk pengindeksan teks lengkap juga dapat membantu.

  • Masalah halaman

    Ukuran file halaman yang tidak mencukupi, seperti pada sistem yang memiliki file halaman kecil dengan pertumbuhan terbatas, juga dapat menyebabkan fdhost.exe atau sqlservr.exe kehabisan memori.

    Jika log perayapan tidak menunjukkan kegagalan terkait memori, kemungkinan performanya lambat karena penomoran yang berlebihan.

Memperkirakan Persyaratan Memori Proses Host Daemon Filter (fdhost.exe)

Jumlah memori yang diperlukan oleh proses fdhost.exe untuk populasi terutama tergantung pada jumlah rentang perayapan teks lengkap yang digunakannya, ukuran memori bersama masuk (ISM), dan jumlah maksimum instans ISM.

Jumlah memori (dalam byte) yang dikonsumsi oleh host daemon filter dapat diperkirakan kira-kira dengan menggunakan rumus berikut:

number_of_crawl_ranges 'ism_size'max_outstanding_isms* 2

Nilai default variabel dalam rumus sebelumnya adalah sebagai berikut:

Variabel Nilai default
number_of_crawl_ranges Jumlah CPU
ism_size 1 MB untuk komputer x86

4 MB, 8 MB, atau 16MB untuk komputer x64, tergantung pada total memori fisik
max_outstanding_isms 25 untuk komputer x86

5 untuk komputer x64

Tabel berikut menyajikan panduan tentang cara memperkirakan persyaratan memori fdhost.exe. Rumus dalam tabel ini menggunakan nilai berikut:

  • F, yang merupakan perkiraan memori yang diperlukan oleh fdhost.exe (dalam MB).

  • T, yang merupakan total memori fisik yang tersedia pada sistem (dalam MB).

  • M, yang merupakan pengaturan optimal max server memory .

Penting

Untuk informasi penting tentang rumus, lihat 1, 2, dan 3, di bawah ini.

Platform Memperkirakan persyaratan memori fdhost.exe dalam MB-F 1 Rumus untuk menghitung memori server maks-M 2
x86 F = Jumlah rentang * rayapan 50 M =minimum( T , 2000**)--F** 500
x64 F = Jumlah rentang * rayapan 10 * 8 M = T - F - 500

1 Jika beberapa populasi penuh sedang berlangsung, hitung persyaratan memori fdhost.exe masing-masing secara terpisah, sebagai F1, F2, dan sebagainya. Kemudian hitung M sebagai T- sigma**(_F_i)**.

2 500 MB adalah perkiraan memori yang diperlukan oleh proses lain dalam sistem. Jika sistem melakukan pekerjaan tambahan, tingkatkan nilai ini.

3 . ism_size diasumsikan 8 MB untuk platform x64.

Contoh: Memperkirakan Persyaratan Memori fdhost.exe

Contoh ini untuk komputer AMD64 yang memiliki RAM 8GM dan 4 prosesor inti ganda. Perkiraan perhitungan pertama memori yang diperlukan oleh fdhost.exe-F. Jumlah rentang rayapan adalah 8.

F = 8*10*8=640

Perhitungan berikutnya mendapatkan nilai optimal untuk max server memory-M. Tdia total memori fisik yang tersedia pada sistem ini di MB-T-adalah 8192.

M = 8192-640-500=7052

Contoh: Mengatur memori server maks

Contoh ini menggunakan pernyataan sp_configure dan RECONFIGURETransact-SQL untuk mengatur max server memory ke nilai yang dihitung untuk M dalam contoh sebelumnya, 7052:

USE master;  
GO  
EXEC sp_configure 'max server memory', 7052;  
GO  
RECONFIGURE;  
GO  

Untuk mengatur opsi konfigurasi memori server maks

Faktor-faktor yang Dapat Mengurangi Konsumsi CPU

Kami mengharapkan bahwa performa populasi penuh tidak optimal ketika konsumsi CPU rata-rata lebih rendah dari sekitar 30 persen. Bagian ini membahas beberapa faktor yang memengaruhi konsumsi CPU.

  • Menunggu laman tinggi

    Untuk mengetahui apakah waktu tunggu halaman tinggi, jalankan pernyataan Transact-SQL berikut:

    Execute SELECT TOP 10 * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC;  
    

    Tabel berikut ini menjelaskan jenis tunggu yang menarik di sini.

    Jenis tunggu Deskripsi Kemungkinan resolusi
    PAGEIO_LATCH_SH (_EX atau _UP) Ini dapat menunjukkan penyempitan IO, dalam hal ini Anda biasanya juga akan melihat panjang antrean disk rata-rata tinggi. Memindahkan indeks teks lengkap ke grup file yang berbeda pada disk yang berbeda dapat membantu mengurangi hambatan IO.
    PAGELATCH_EX (atau _UP) Ini dapat menunjukkan banyak ketidakcocokan di antara utas yang mencoba menulis ke file database yang sama. Menambahkan file ke grup file tempat indeks teks lengkap berada dapat membantu meringankan pertikaian tersebut.

    Untuk informasi selengkapnya, lihat sys.dm_os_wait_stats (Transact-SQL).

  • Inefisiensi dalam memindai tabel dasar

    Populasi penuh memindai tabel dasar untuk menghasilkan batch. Pemindaian tabel ini mungkin tidak efisien dalam skenario berikut:

    • Jika tabel dasar memiliki persentase tinggi kolom di luar baris yang sedang diindeks teks lengkap, memindai tabel dasar untuk menghasilkan batch mungkin menjadi hambatan. Dalam hal ini, memindahkan data yang lebih kecil secara berurut menggunakan varchar(max) atau nvarchar(max) mungkin membantu.

    • Jika tabel dasar sangat terfragmentasi, pemindaian mungkin tidak efisien. Untuk informasi tentang komputasi data di luar baris dan fragmentasi indeks, lihat sys.dm_db_partition_stats (Transact-SQL) dan sys.dm_db_index_physical_stats (Transact-SQL).

      Untuk mengurangi fragmentasi, Anda dapat mengatur ulang atau membangun kembali indeks berkerumun. Untuk informasi selengkapnya, lihat Mengatur ulang dan Membangun Ulang Indeks.

Pemecahan Masalah Performa Pengindeksan Lambat Karena Filter

Saat mengisi indeks teks lengkap, Mesin Teks Lengkap menggunakan dua jenis filter: multithreaded dan single-threaded. Beberapa dokumen, seperti dokumen Microsoft Word, difilter menggunakan filter multithreaded. Dokumen lain, seperti dokumen Adobe Acrobat Portable Document Format (PDF), difilter menggunakan filter utas tunggal.

Untuk alasan keamanan, filter dimuat oleh proses host daemon filter. Instans server menggunakan proses multithreaded untuk semua filter multithreaded dan proses utas tunggal untuk semua filter utas tunggal. Saat dokumen yang menggunakan filter multithreaded berisi dokumen yang disematkan yang menggunakan filter utas tunggal, Mesin Teks-Penuh meluncurkan proses utas tunggal untuk dokumen yang disematkan. Misalnya, pada menemukan dokumen Word yang berisi dokumen PDF, Mesin Teks-Penuh menggunakan proses multithreaded untuk konten Word dan meluncurkan proses utas tunggal untuk konten PDF. Filter utas tunggal mungkin tidak berfungsi dengan baik di lingkungan ini, namun, dan dapat menstabilkan proses pemfilteran. Dalam keadaan tertentu di mana penyematan seperti itu umum, destabilisasi dapat menyebabkan crash proses pemfilteran. Ketika ini terjadi, Mesin Teks-Penuh merutekan ulang dokumen yang gagal (misalnya, dokumen Word yang berisi konten PDF yang disematkan) ke proses pemfilteran utas tunggal. Jika perutean ulang sering terjadi, hal ini menghasilkan penurunan performa proses pengindeksan teks lengkap.

Untuk mengatasi masalah ini, tandai filter untuk dokumen kontainer (Word dalam hal ini) sebagai filter utas tunggal. Anda dapat mengubah nilai registri filter untuk menandai filter tertentu sebagai filter utas tunggal. Untuk menandai filter sebagai filter berulir tunggal, Anda perlu mengatur nilai registri ThreadingModel untuk filter ke Apartment Threaded. Untuk informasi tentang apartemen berulir tunggal, lihat laporan resmi Memahami dan Menggunakan Model Utas COM.

Lihat Juga

Opsi Konfigurasi Server Memori Server
Opsi Konfigurasi Server rentang perayapan teks lengkap maks
Mengisi Indeks Teks Lengkap
Membuat dan Mengelola Indeks Teks Lengkap
sys.dm_fts_memory_buffers (T-SQL)
sys.dm_fts_memory_pools (T-SQL)
Memecahkan Masalah Pengindeksan Teks Lengkap