Jurang Penambahan Lajur IDENTITI SQL Server: Memahami Cache
LajurSQL Server IDENTITY
, digunakan untuk menjana pengecam baris unik, kadangkala mempamerkan gelagat yang tidak dijangka: selepas pelayan dimulakan semula, kenaikan melonjak ratusan, bukannya meningkat secara berurutan dengan satu. Ini bukan pepijat, tetapi akibat daripada pengoptimuman prestasi yang diperkenalkan dalam SQL Server 2012.
SQL Server cache nilai identiti untuk meningkatkan prestasi. Cache ini biasanya menyimpan 1,000 int
nilai atau 10,000 bigint
/numeric
nilai. Setelah cache habis, kumpulan baharu diperuntukkan. Walau bagaimanapun, memulakan semula pelayan akan membuang sebarang nilai cache yang tidak digunakan.
Lompatan yang diperhatikan, dengan tiga digit terakhir kekal malar (cth., sentiasa berakhir dengan 306), mencerminkan baki nilai cache selepas peruntukan awal 1,000.
Walaupun mekanisme caching ini mewujudkan jurang dalam urutan IDENTITY
, ia meningkatkan prestasi terutamanya. Melainkan jika dimulakan semula secara kerap adalah perkara biasa, kesannya adalah minimum. Walau bagaimanapun, beberapa pilihan wujud untuk mengurangkan perkara ini:
IDENTITY
dengan objek SEQUENCE
, membenarkan kawalan yang lebih halus ke atas saiz cache.ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;
untuk melumpuhkan cache bagi pangkalan data tertentu.Adalah penting untuk diingat bahawa walaupun dengan penyelesaian ini, sisipan serentak dan penarikan balik transaksi masih boleh menghasilkan jurang. Untuk aplikasi yang menuntut kesinambungan jujukan mutlak, pertimbangkan alternatif seperti penjana UUID atau pelaksanaan jujukan tersuai.
Atas ialah kandungan terperinci Mengapa Kenaikan IDENTITI Pelayan SQL Saya Melompat Selepas Mulakan Semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!