Cache Fusion, không gì khác ngoài việc chuyển các khối giữa hai phiên bản trong Oracle ® RealApplication Clusters (RAC), là tính năng chính và quan trọng nhất trong RAC.
Giới thiệu
Theo Oracle trong Oracle RAC Cache Fusion, mỗi “cá thể [trong một] cụm RAC [có] bộ đệm đệm cục bộ riêng của nó, nơi nó thực hiện chức năng bộ đệm. Nhưng khi nhiều người dùng được kết nối với các nút khác nhau, [người dùng thường] cần truy cập hoặc khóa khối dữ liệu thuộc sở hữu của [khác] phiên bản.
“Trong những trường hợp như vậy, [the] yêu cầu phiên bản yêu cầu một phiên bản lưu giữ cho khối dữ liệu đó và truy cập nó thông qua [một] cơ chế kết nối. Khái niệm này được gọi là Cache Fusion . ”
Phiên bản đơn
Trước khi khám phá Cache Fusion, hãy xem cách các cơ sở dữ liệu không phải RAC hoạt động như thế nào khi yêu cầu khối dữ liệu xảy ra.
Sau đây là quy trình giao dịch bốn bước trong một trường hợp duy nhất (được rút ra từ bài đăng trên blog củaGopi’s Cache Fusion:
- Khi người dùng đọc một khối được sửa đổi gần đây, họ có thể tìm thấy một giao dịch đang hoạt động trong khối.
- Người dùng sẽ cần đọc tiêu đề phân đoạn hoàn tác để quyết định xem giao dịch đã được cam kết hay chưa.
- Nếu giao dịch không được cam kết, quy trình sẽ tạo ra một so sánh đọc (CR) nhất quán đối với khối trong bộ đệm đệm bằng cách sử dụng dữ liệu trong khối và dữ liệu được lưu trữ trong phân đoạn chính.
- Nếu phân đoạn hoàn tác cho thấy giao dịch đã được cam kết, quy trình phải truy cập lại quy tắc chặn và xóa bỏ quy tắc đó và tạo quá trình thực hiện lại cho các thay đổi.
Bây giờ, hãy xem cùng một kịch bản trong RAC với một cụm hai phiên bản, được gọi là Cache Fusion.
Dung hợp bộ nhớ đệm
Gopi tiếp tục, “Trong RAC, có [hai] hoặc nhiều trường hợp truy cập cùng một tệp cơ sở dữ liệu [có cùng bộ nhớ (suchas, ASM)]. Mỗi cá thể có SGA riêng, các quy trình nền, có nghĩa là mỗi cá thể có bộ đệm đệm riêng (cục bộ cho từng cá thể). Các bộ đệm [sic] cache này hoạt động riêng lẻ ở [cấp độ] phiên bản và kết hợp với nhau ở cấp độ cơ sở dữ liệu [cấp độ] cơ sở dữ liệu để tạo thành thực thể đơn nhất (Bộ nhớ đệm toàn cầu) [để] chia sẻ các khối dữ liệu giữa chúng. Đây là những gì được gọi là Cache Fusion . Cache Fusion sử dụng kết nối IPC tốc độ cao để cung cấp việc chuyển các khối dữ liệu từ bộ nhớ đệm đến bộ đệm ẩn giữa các cá thể trong một cụm. Việc phân khối dữ liệu này loại bỏ I / O của đĩa và tối ưu hóa khả năng đọc / ghi đồng thời. ”
Sự hiểu biết này đưa chúng ta đến với Dịch vụ bộ nhớ đệm toàn cầu (GCS), dịch vụ này chịu trách nhiệm chặn chuyển giữa các phiên bản.
Sau đây là các quy trình nền GCS được đề cập trong bài đăng củaGopi:
- Quy trình dịch vụ bộ nhớ đệm toàn cầu (LMSn)
- Global Enqueue Service Daemon (LMD)
Gopi tiếp tục nói, “Trước khi đi vào các quy trình nền này, [sic] hãy xem cách Oracle xử lý các khối dữ liệu và cách nó quản lý chúng.
“Oracle coi các khối dữ liệu là tài nguyên. Mỗi tài nguyên này có thể được giữ ở các chế độ không quan tâm, đây là [một] cơ chế quan trọng để duy trì tính toàn vẹn của dữ liệu. Các chế độ này được phân loại thành [ba] loại tùy thuộc vào việc người sở hữu tài nguyên có ý định sửa đổi dữ liệu hay đọc dữ liệu hay không. ”
Gopi liệt kê các chế độ như sau:
- Chế độ Null (N) :Chế độ rỗng thường được giữ như một trình giữ chỗ.
- Chế độ (S) được chia sẻ :Trong chế độ này, một khối dữ liệu không bị phiên khác sửa đổi nhưng sẽ cho phép truy cập được chia sẻ đồng thời.
- Chế độ độc quyền (X) :Cấp độ này cấp quyền truy cập độc quyền cho quá trình lưu giữ. Các quy trình khác không thể ghi vào tài nguyên. Nó có thể có các khối đọc nhất quán.
Global Cache Service Daemon (LMSn)
Khi có yêu cầu từ một phiên bản, Gopi nói với chúng tôi, “GCS tổ chức việc vận chuyển khối đến các phiên bản khác bằng cách giữ lại các bản sao của khối trong bộ nhớ. Mỗi bản sao như vậy được gọi là một hình ảnh quá khứ (PI). […] Cũng có thể có nhiều hơn [một] PI khối dữ liệu tùy thuộc vào số lần khối được yêu cầu trong [giai đoạn] bẩn. ”
Lưu ý: Gopi cho biết thêm, “Nếu bạn muốn đọc một khối dữ liệu, nó phải được đọc ở trạng thái nhất quán [a]. Bạn không được phép đọc những thay đổi do người khác thực hiện. ”
Global Enqueue Service Daemon (LMD)
Gopi giải thích, “Dịch vụ toàn cầu (GES) theo dõi trạng thái của tất cả các cơ chế xếp hàng của Oracle. GES thực hiện kiểm soát tiền tệ trên khóa bộ đệm từ điển, khóa bộ đệm thư viện và giao dịch. Nó thực hiện thao tác này đối với các tài nguyên được truy cập bởi nhiều phiên bản. GES kiểm soát quyền truy cập vào tệp dữ liệu và tệp điều khiển nhưng không kiểm soát các khối dữ liệu. "
Sau đây là các tài nguyên được quản lý GES màGopi chia sẻ:
- Khóa giao dịch :Nó có được ở chế độ độc quyền khi một giao dịch bắt đầu thay đổi (chèn, cập nhật, v.v.) Khóa được giữ cho đến khi giao dịch được cam kết hoặc quay trở lại.
- Khóa Thư viện Bộ nhớ cache :Khi một đối tượng cơ sở dữ liệu (chẳng hạn như bảng, dạng xem, gói, thân gói, […], v.v.) được tham chiếu trong quá trình phân tích cú pháp hoặc biên dịch câu lệnh SQL, DML hoặc DDL, PL / SQL hoặc Java, quá trình phân tích cú pháp hoặc biên dịch câu lệnh có được khóa bộ nhớ cache của thư viện ở chế độ chính xác.
- Khóa bộ nhớ đệm từ điển :Hàng đợi chung được sử dụng trong chế độ cơ sở dữ liệu cụm. Cấu trúc từ điển dữ liệu giống nhau đối với tất cả các phiên bản Oracle trong cơ sở dữ liệu cụm.
- Khóa bảng :Đây là các khóa GES bảo vệ toàn bộ (các) bảng. Một giao dịch viên yêu cầu một khóa bảng khi một bảng được sửa đổi. Một khóa bảng có thể được giữ ở bất kỳ chế độ chung nào:null (N), chia sẻ hàng (RS), dành riêng cho hàng (RX), khóa chia sẻ (S), chia sẻ rowexclusive (SRX) hoặc độc quyền (X).
Hình ảnh đã đọc trong quá khứ và nhất quán
Trước khi đi đến kịch bản chính, chúng ta cần hiểu các hình ảnh trong quá khứ (PI) và các hình ảnh nhất quán (CR).
Hình ảnh trước đây
Rohit Gupta, trong bài viết của mình, Oracle RAC Cache Fusion chia sẻ, “Khái niệm về Past Image rất cụ thể đối với thiết lập RAC. Hãy xem xét một phiên bản giữ [an] khóa độc quyền một khối dữ liệu để cập nhật. Nếu một số cá thể khác trong RAC cần khối, bộ phận lưu giữ có thể gửi khối đến cá thể yêu cầu (thay vì ghi nó vào đĩa) bằng cách lưu giữ một PI (Hình ảnh Quá khứ) của khối trong bộ đệm đệm của nó. Về cơ bản, PI là bản sao của khối dữ liệu trước khi khối được ghi vào đĩa. ”
Hình ảnh được đọc nhất quán:
Gupta tiếp tục, “Đọc liên tục là cần thiết khi một khối cụ thể đang được truy cập / sửa đổi bởi giao dịch [A1] và đồng thời với một giao dịch khác [A2] cố gắng truy cập / đọc khối. Nếu [A1] chưa được cam kết, [A2] cần một bản sao [(khối không được sửa đổi)] đọc nhất quán của khối để tiếp tục. Bản sao CR được tạo bằng cách sử dụng dữ liệu UNDO cho khối đó. ”
Tình huống kết hợp bộ nhớ cache
Cache Fusion có ba trường hợp khác nhau:
- Đọc-Đọc kịch bản
- Kịch bản Đọc-Viết
- Kịch bản Viết-Viết
Kịch bản Đọc-Đọc:
Đây là một kịch bản không quan trọng vì cá thể yêu cầu một khối và cá thể chặn yêu cầu đều yêu cầu các giao dịch đọc. Ở đây, không có khóa tài khoản độc quyền. Phiên bản B yêu cầu khối đọc tới GCS. GCS kiểm tra tính khả dụng của khối do phiên bản A sở hữu và có được một khóa dùng chung. Bây giờ GCS yêu cầu Instance Aship khối được yêu cầu tới Instance B.
Kịch bản Đọc-Ghi:
Đây là một tình huống quan trọng.
Phiên bản A đang cập nhật một khối dữ liệu, vì vậy nó cần có được một khóa độc quyền. Sau một thời gian, Phiên bản B gửi yêu cầu đọc tới GCS cho cùng một khối dữ liệu.
GCS kiểm tra và nhận thấy rằng Instance đã có được một khóa độc quyền trên cùng một khối. Vì vậy, GCS yêu cầu Phiên bản A giải phóng khối. Bây giờ, Phiên bản A tạo một Hình ảnh CR trong bộ nhớ đệm bộ đệm riêng của nó và thông báo cho GCS để chuyển nó đến Phiên bản B.
GCS tham gia vào việc tạo hình ảnh CR và chuyển nó đến phiên bản được yêu cầu ở nơi Cache Fusion phát huy tác dụng.
Viết-Viết kịch bản
Phiên bản A và Phiên bản B đều đang cố gắng có được một khóa độc quyền trên một khối dữ liệu.
Phiên bản B gửi một yêu cầu khối tới GCS. GCS kiểm tra tính khả dụng và phát hiện Phiên bản A đã bị khóa. Do đó, GCS yêu cầu Phiên bản A giải phóng khối cho Phiên bản B. Bây giờ, Phiên bản A tạo một PI của khối hiện tại của chính nó trong bộ đệm của nó, thực hiện các mục nhập làm lại và thông báo cho GCS để gửi khối đến Phiên bản B.
Phiên bản B hiện sử dụng khối và thực hiện các thay đổi như bình thường.
Sự khác biệt chính giữa CR và PI
Gupta bổ sung suy nghĩ cuối cùng sau đây về hình ảnh PI so với CR:“[Hình ảnh] CR được chuyển đi để tránh [a] Kiểu tranh chấp Đọc-Ghi vì cơ quan yêu cầu không muốn thực hiện thao tác ghi và do đó sẽ không cần lockon độc quyền của khối. Vì vậy, đối với một hoạt động đọc, hình ảnh CR của khối sẽ là đủ. Trong khi đối với tranh chấp Ghi-Viết, cá thể yêu cầu cũng cần có được một khóa riêng của khối dữ liệu. [Để] có được khóa cho các hoạt động ghi, nó sẽ cần khối thực tế chứ không phải hình ảnh CR. Cá thể lưu giữ do đó sẽ gửi khối thực nhưng có thể tin cậy để giữ PI của khối cho đến khi khối được ghi vào đĩa. Vì vậy, nếu có bất kỳ lỗi hoặc sự cố phiên bản nào, Oracle có thể xây dựng khối bằng cách sử dụng PI từ các phiên bản RAC. Sau khi khối được ghi vào đĩa, nó sẽ không cần phải phục hồi trong trường hợp xảy ra sự cố và do đó, các PI được liên kết có thể bị loại bỏ. ”
Tìm hiểu thêm về các dịch vụ Dữ liệu của chúng tôi.
Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào. Bạn cũng có thể bắt đầu cuộc trò chuyện với chúng tôi.