Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cơ sở dữ liệu Windows Azure SQL - Cột tự động tăng danh tính bỏ qua các giá trị

Bạn có thể gặp may ở đây nếu bạn cần loại bỏ những khoảng cách này.

Tôi đã tự mình gặp phải vấn đề này khi tôi đang phát triển / thử nghiệm một ứng dụng mới. Tôi đang tìm hiểu những gì đang xảy ra ở đây trong sql azure dựa trên những gì tôi đã đọc về sql server 2012. Tôi không thể tìm thấy bất kỳ tài liệu nào về điều này cho sql azure.

Từ những gì tôi đã đọc, đây là một tính năng xuất hiện như một IMO lỗi. Trong Sql server 2012 Microsoft đã thêm khả năng tạo chuỗi. Chuỗi ghi lại những giá trị nào đã được sử dụng trong các khối 1000. Vì vậy, giả sử chuỗi của bạn đang tiến triển ... 1, 2, 3, 4, 5 ... và sau đó máy chủ sql của bạn khởi động lại. Vâng, chuỗi đã lưu thực tế là khối 1-1000 đã được sử dụng nên nó sẽ chuyển bạn đến 1000 tiếp theo .... vì vậy giá trị tiếp theo của bạn là 1001, 1002, 1003, 1004 .... Điều này cải thiện hiệu suất của chèn khi sử dụng trình tự, nhưng có thể dẫn đến khoảng trống bất thường. Có một giải pháp cho điều này cho trình tự của bạn. Khi chỉ định trình tự, bạn hãy thêm tham số "NOCACHE" để nó không lưu các khối 1000 cùng một lúc. Xem tại đây để biết thêm tài liệu.

Trường hợp điều này trở thành một vấn đề là các cột Danh tính dường như đã được thay đổi để sử dụng cùng một mô hình này. Vì vậy, khi máy chủ của bạn hoặc trong trường hợp này là phiên bản sql azure của bạn khởi động lại, bạn có thể nhận được khoảng trống lớn (1000) trong các cột nhận dạng của bạn vì nó đang lưu vào bộ nhớ đệm các khối lớn là "đã qua sử dụng". Có một giải pháp cho vấn đề này cho sql server 2012. Bạn có thể chỉ định cờ khởi động t272 để hoàn nguyên danh tính của bạn về sử dụng mô hình sql server 2008 r2 cũ. Vấn đề là tôi không biết (có thể không thực hiện được) về cách chỉ định điều này trong sql Azure. Không thể tìm thấy tài liệu. Xem chuỗi này để biết thêm chi tiết về sql server 2012.

Kiểm tra tài liệu nhận dạng tại đây trong msdn. Cụ thể là phần "Giá trị liên tiếp sau khi máy chủ khởi động lại hoặc các lỗi khác". Đây là những gì nó nói:

Vì vậy, nếu bạn cần có các giá trị liên tiếp, bạn có thể thử chỉ định một chuỗi với nocache thay vì dựa vào cột nhận dạng của bạn. Tôi chưa thử điều này, nhưng có vẻ như bạn sẽ gặp khó khăn khi làm việc này với khung thực thể.

Xin lỗi nếu điều này không giúp được nhiều, nhưng ít nhất đó là một số thông tin về những gì bạn đang trải qua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm biểu tượng cảm xúc / biểu tượng cảm xúc vào bảng SQL Server

  2. Cách xác định giá trị cho các tháng bị thiếu dựa trên dữ liệu của các tháng trước trong T-SQL

  3. Một số cách truy cập Microsoft SQL Server từ Linux là gì?

  4. 3 cách liệt kê tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu SQL Server

  5. Làm thế nào để cài đặt localdb riêng biệt?