Đăng nhập giao dịch trong RAM hoặc tập tin vật lý?


9

Tôi là người mới bắt đầu giao dịch, chỉ là một câu hỏi về nhật ký giao dịch. Chúng tôi biết rằng khi chúng tôi cam kết giao dịch, các thay đổi được ghi vào nhật ký giao dịch, nhưng là nhật ký giao dịch trong RAM hoặc tệp vật lý? Nếu nó nằm trong RAM và khi xảy ra lỗi hệ thống, rõ ràng RAM sẽ bị xóa lại để chúng ta mất thông tin giao dịch, vậy làm thế nào chúng ta có thể khôi phục cam kết?

Câu trả lời:


15

Bạn có thể tìm thấy một hướng dẫn khá toàn diện cho câu hỏi này tại đây , nhưng để tóm tắt, SQL Server sẽ không trả lại quyền kiểm soát cho ứng dụng đã thực hiện giao dịch cho đến khi giao dịch đó được làm cứng vào đĩa. Cụ thể, một khi nó đã được làm cứng vào tệp nhật ký giao dịch, kiểm soát có thể được trả lại.

Dữ liệu, tại thời điểm này, có thể không được cứng vào tệp dữ liệu, nó vẫn có thể nằm trong bộ đệm bộ đệm dữ liệu, nhưng vì nó đã được cứng vào nhật ký giao dịch, sau đó phục hồi cơ sở dữ liệu, trong trường hợp có lỗi, có thể khôi phục điều này giao dịch và duy trì các thay đổi một cách an toàn.

Có một bộ đệm bộ đệm nhật ký trong bộ nhớ được sử dụng để giảm tác động hiệu suất của việc ghi tuần tự vào nhật ký giao dịch. Bộ đệm được chuyển sang đĩa theo một số điều kiện, nhưng một trong số đó là một cam kết giao dịch. Cho đến khi dữ liệu này được tăng cường, kiểm soát không được trả lại cho người gọi, vì vậy ngay cả khi bạn gặp lỗi trong bộ đệm này, tính nhất quán giao dịch vẫn được duy trì do giao dịch này chưa được coi là đã cam kết. Bạn sẽ mất các thay đổi dữ liệu trong giao dịch đó, nhưng vì nó không được cam kết, ứng dụng của bạn sẽ xem xét những thay đổi đó bị mất vì cam kết chưa bao giờ được hoàn thành.



4

Một cơ sở dữ liệu được tạo thành hai tệp, một tệp dữ liệu và tệp nhật ký giao dịch. Chúng được lưu trữ trên đĩa.

Mỗi cơ sở dữ liệu có một bộ đệm nhật ký trong RAM, khi một giao dịch được thực hiện, nó sẽ được chuyển đến bộ đệm nhật ký đang chờ để được xóa vào đĩa. Do đó, tạm thời khi một biến đổi đã được cam kết và chờ để được xóa vào đĩa, nó nằm trong bộ nhớ, tuy nhiên cuối cùng nó được lưu trữ trên đĩa trong tệp chứ không phải RAM.

Tôi đang quá đơn giản ở đây, tôi khuyên bạn nên đọc nhật ký giao dịch, tôi đề nghị một trong những bài giảng của Paul Randals ở đây

https://youtu.be/LvlFgxZZOj4


@kevinwhat Cảm ơn câu trả lời của bạn. Vì vậy, nếu chúng tôi cam kết một giao dịch và nó được cập nhật trong bộ đệm nhật ký thì hệ thống sẽ bị lỗi trước khi bộ đệm nhật ký xóa vào đĩa, vậy làm cách nào để phục hồi giao dịch?

1
@slowjams trong trường hợp đó, các thay đổi mà giao dịch đã thực hiện sẽ được khôi phục, vì nó không ổn định trên đĩa trong nhật ký tại thời điểm xảy ra sự cố.
Sean Gallardy

3
Slowjamsm những gì bạn desrcibe không xảy ra. Cam kết là đồng bộ - nó không kết thúc cho đến khi tất cả các bản ghi nhật ký cho đến khi thời điểm đó được ghi vào đĩa ("cứng").
Tibor Karaszi

0

Như được viết từ những người khác, nhật ký giao dịch sẽ luôn được ghi vào đĩa, trước khi COMMITkiểm soát trả về ứng dụng của bạn. Vì lý do này, tệp nhật ký phải luôn được đặt trên ổ SSD nhanh.

Nhưng để hoàn thiện: Với ít nhất Windows Server 2016 cộng với SQL Server 2016, bạn có thể thêm NVDIMM (DIMM không biến động = Flash hoặc RAM được hỗ trợ pin) vào máy chủ của bạn. Trong trường hợp này, SQL Server sẽ sử dụng các NVDIMM này để đặt đuôi nhật ký giao dịch "nóng" trên các NVDIMM, vì chúng tồn tại trong một sự kiện tắt nguồn theo định nghĩa.

Điều này sẽ tăng tốc độ ghi mạnh mẽ (vì RAM nhanh hơn nhiều so với SSD), nhưng bạn sẽ chỉ đề cập đến nó trên cơ sở dữ liệu với nhiều lần ghi / cam kết nhỏ (ví dụ: cơ sở dữ liệu đằng sau một cửa hàng trực tuyến bận rộn hoặc nhiều trò chơi trực tuyến có nhiều người chơi đồng thời).


3
Đây không thực sự là một câu trả lời cho câu hỏi, nó là một phích cắm cho các đĩa nhanh hơn. Nhật ký không phải lúc nào cũng cần được lưu trữ nhanh, có nhiều lý do kinh doanh để chúng không tồn tại. Nếu bạn muốn mua nhanh, nếu bạn không cần tốc độ ....
James Jenkins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.