• 1402/07/05
  • 0
  • 73
1402/07/05 |
backend
asp-net-core

راهکار ایجاد شماره Id بدون گپ در SQL Server

در جدول واسط بین کاربران و نقش آنها (UserInRoles) متوجه شدم SQL Server که در جدول Id که از 1 رو به بالا داشت می‌شمرد، ناگهان از 23 به 1001 پرید!

عکس: https://uploadb.me/5hzr6jboiv49/Screenshot 2023-09-26 083501.png.html

توی اینترنت جستجو کردم و به مشکلات مشابه برخوردم که کاربران شکایت داشتن و عامل اینطور معرفی شده بود که SQL Server از نسخه 2012 به بعد به دلیل افزایش سرعت تعدادی از اعداد رو برمیداره و توی کش خودش نگه‌داری میکنه تا سریع اختصاص بده.

راه‌حل‌ها بسیار مختلف بودن: از متوقف کردن قابلیت Cache گرفته تا استفاده از قابلیت Sequence یا Lock کردن کدهای C# تا زمان تخصیص شماره جدید توسط خودم در کدهای برنامه (جهت جلوگیری از تداخلات احتمالی). برای من غیرفعال کردن قابلیت Cache مناسب‌ترین راه به نظر اومد که با استفاده از دستور زیر اعمالش کنم:

ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE=OFF;

نظر شما چیه؟ آیا این راهکار مناسبه؟ یا ممکنه دوباره گپ پیش بیاد؟ راهکار جایگزین چیه؟

لینک راه حل پیشنهادی برای غیرفعال کردن Identity_Cache:

https://stackoverflow.com/a/76705260


 

سلام
در صورتی که سرعت عملیات INSERT برای شما بسیار مهم نیست، غیرفعال کردن IDENTITY_CACHE یک راه حل مناسب است. اما اگر می‌خواهید هم سرعت را حفظ کنید و هم مشکل را حل کنید، استفاده از SEQUENCE یک گزینه خوب است.



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری