Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membersihkan Sambungan Ketergantungan Sql yang Lapuk dengan Cekap dalam Pelayan SQL?

Bagaimanakah Saya Boleh Membersihkan Sambungan Ketergantungan Sql yang Lapuk dengan Cekap dalam Pelayan SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-12 12:47:44151semak imbas

How Can I Efficiently Purge Stale SqlDependency Connections in SQL Server?

Mengurus Sambungan SqlDependency untuk Prestasi Pelayan SQL Optimum

Pengurusan SqlDependency objek yang tidak cekap dalam SQL Server boleh menyebabkan kebocoran memori dan kesesakan prestasi. Artikel ini memperincikan strategi untuk membersihkan sumber ini dengan berkesan selepas pemprosesan acara.

Masalahnya: Mengumpul Sumber

Menggunakan SqlDependency mencipta kumpulan perbualan dan titik akhir dalam pangkalan data. Sumber ini terkumpul dari semasa ke semasa, memori yang mungkin meletihkan, terutamanya dalam edisi SQL Server Express.

Penyelesaian Pembersihan Pangkalan Data

Skrip SQL berikut mengenal pasti dan mengalih keluar titik akhir perbualan yang tidak aktif, membebaskan memori:

<code class="language-sql">DECLARE @ConvHandle uniqueidentifier
DECLARE Conv CURSOR FOR
SELECT CEP.conversation_handle FROM sys.conversation_endpoints CEP
WHERE CEP.state = 'DI' or CEP.state = 'CD'
OPEN Conv;
FETCH NEXT FROM Conv INTO @ConvHandle;
WHILE (@@FETCH_STATUS = 0) BEGIN
    END CONVERSATION @ConvHandle WITH CLEANUP;
    FETCH NEXT FROM Conv INTO @ConvHandle;
END
CLOSE Conv;
DEALLOCATE Conv;</code>

Had Kebergantungan Sql

Kelas SqlDependency standard mempunyai had:

  • Pengesanan perubahan yang tidak konsisten: Ia tidak dapat menangkap semua pengubahsuaian jadual dengan pasti.
  • Sumber berterusan: Kumpulan perbualan dan titik akhir kekal selama-lamanya, menyumbang kepada pengumpulan sumber.

Alternatif Unggul: SqlDependencyEx

SqlDependencyEx, perpustakaan sumber terbuka, menyediakan keupayaan yang dipertingkatkan:

  • Penjejakan perubahan yang boleh dipercayai: Menggunakan pencetus pangkalan data dan Broker Perkhidmatan untuk pengesanan perubahan yang lebih tepat.
  • Contoh penggunaan:
<code class="language-csharp">int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
          TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME)) 
{
    sqlDependency.TableChanged += (o, e) => changesReceived++;
    sqlDependency.Start();

    // Simulate table changes.
    MakeTableInsertDeleteChanges(changesCount);

    // Allow time for change notification.
    Thread.Sleep(1000);
}

Assert.AreEqual(changesCount, changesReceived);</code>

Dengan menggunakan prosedur pembersihan pangkalan data atau berhijrah ke SqlDependencyEx, anda boleh mengurus sumber SqlDependency dengan berkesan, mencegah isu memori dan mengoptimumkan prestasi SQL Server.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membersihkan Sambungan Ketergantungan Sql yang Lapuk dengan Cekap dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn