Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Xuất hiện Phantom data vì sử dụng isolation level là Uncommitted Read?

  1. #1
    Ngày gia nhập
    01 2011
    Bài viết
    37

    Mặc định Xuất hiện Phantom data vì sử dụng isolation level là Uncommitted Read?

    Mình có một vấn đề trong SQL sever. VD như sau:
    + Transaction T1 đang thực hiện update data vào DB
    + Transaction T2 thực hiện Uncommitted Read lên dữ liệu đang được cập nhật ở T1.

    Khi một transaction dùng isolation level là Uncommitted Read thì có khả năng xuất hiện phantom data (dữ liệu ảo) không?. Và ảnh hưởng của phantom data là như thế nào? Có chiếm dung lượng bộ nhớ không?

    Cảm ơn các bạn đã dành thời gian và chia sẽ!
    Đã được chỉnh sửa lần cuối bởi christianle : 07-05-2012 lúc 11:22 AM.

  2. #2
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Khi sử dụng Uncommitted Read thì thường bị dirty read, muốn tránh phantom read thì sử dụng SERIALIZABLE. Phải đưa ra kịch bản cụ thể thì mới biết dc xảy ra cái gì, bạn có thể dùng WAITFOR DELAY 'time' để giả lập kịch bản. Phantom read có thể dẫn đến hiện tượng comit data ko mong muốn, sai lệch nghiệp vụ
    Cánh Chym ứ mỏi

  3. #3
    Ngày gia nhập
    01 2011
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi dieucay555 Xem bài viết
    Khi sử dụng Uncommitted Read thì thường bị dirty read, muốn tránh phantom read thì sử dụng SERIALIZABLE. Phải đưa ra kịch bản cụ thể thì mới biết dc xảy ra cái gì, bạn có thể dùng WAITFOR DELAY 'time' để giả lập kịch bản. Phantom read có thể dẫn đến hiện tượng comit data ko mong muốn, sai lệch nghiệp vụ
    Thanks bạn rất nhiều. Kịch bản của mình ở đây cụ thể là như sau:
    - CT của mình có 1 task thực hiện 2 công việc song song:
    1. Update data lên GUI. (transaction T1)
    2. Save data về DB. (transaction T2)
    Note: Sau khi set analysis data vào để thực hiện task thì kết thúc task có remove những analysis data này. Nhưng hiện tượng gặp phải là memory càng ngày càng tăng mặc dù đã remove. Nên thực hiện task này nhiều lần sẽ throw exception OutOfMemory.

    - Cụ thể là mình muốn clear rằng, khi Dirty Read như thế có chắc chắn bị phantom ko? Và nếu có thì có phải Phantom là nguyên nhân gây nên OutOfMemory exception?

  4. #4
    Ngày gia nhập
    01 2011
    Bài viết
    37

    Any help please?

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Nếu kịch bản của bạn như sau :
    T1 của bạn đang đọc 1 row,
    T2 thực hiện update trên row đó thì có thể là bị dính vào Non-repeatable read (ở T1 thì dữ liệu là XXX, sau khi T2 thực hiện commit thì T1 lại thu dc dữ liệu là YYY)
    Bạn thử SET TRANSACTION ISOLATION LEVEL READ COMMITTED xem sao
    Để rõ hơn cái j đang bị lock trong db thì bạn có thể sử dụng SQL Profiler để monitor (dùng template Tlock) hoặc dùng các dynamic view :
    SQL Code:
    1. SELECT resource_database_id, resource_associated_entity_id,
    2. source_type, resource_description, request_mode, request_status
    3. FROM sys.dm_tran_locks
    Bạn cần xác định thứ tự chính xác của T1,T2 thì mới xác định được là đang bị lock như thế nào
    Cánh Chym ứ mỏi

  6. #6
    Ngày gia nhập
    01 2011
    Bài viết
    37

    Mặc định Xuất hiện Phantom data vì sử dụng isolation level là Uncommitted Read?

    Trích dẫn Nguyên bản được gửi bởi dieucay555 Xem bài viết
    Nếu kịch bản của bạn như sau :
    T1 của bạn đang đọc 1 row,
    T2 thực hiện update trên row đó thì có thể là bị dính vào Non-repeatable read (ở T1 thì dữ liệu là XXX, sau khi T2 thực hiện commit thì T1 lại thu dc dữ liệu là YYY)
    Bạn thử SET TRANSACTION ISOLATION LEVEL READ COMMITTED xem sao
    Để rõ hơn cái j đang bị lock trong db thì bạn có thể sử dụng SQL Profiler để monitor (dùng template Tlock) hoặc dùng các dynamic view :
    SQL Code:
    1. SELECT resource_database_id, resource_associated_entity_id,
    2. source_type, resource_description, request_mode, request_status
    3. FROM sys.dm_tran_locks
    Bạn cần xác định thứ tự chính xác của T1,T2 thì mới xác định được là đang bị lock như thế nào
    Thanks bạn rất nhiều. Để mình thử làm như bạn nói xem sao.

Các đề tài tương tự

  1. Hỏi về DB lookup table (read realated data) MVC 5
    Gửi bởi Shinichi trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 5
    Bài viết cuối: 05-12-2013, 09:48 PM
  2. write, read, append file | xuất, đọc, sửa file
    Gửi bởi ngochoaitn trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 16-08-2013, 12:58 PM
  3. Làm sao để read and write struct data TCHAR
    Gửi bởi albel1205 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 28-12-2011, 10:43 PM
  4. Read và write binary data trong C#?
    Gửi bởi Malib trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 11-04-2010, 07:37 PM
  5. Lỗi assignment of data-member read-only structure
    Gửi bởi comotngay trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 31-03-2008, 07:09 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn