SWITCH LOG như thế nào cho hiệu quả?

Quá trình “SWITCH LOG” trong Oracle là quá trình chuyển đổi giữa các bản ghi redo log. Khi một redo log được đầy, Oracle sẽ tự động chuyển sang sử dụng redo log mới, điều này được gọi là “SWITCH LOG”. Quá trình này không nên gây ra ảnh hưởng đáng kể đến hiệu suất của cơ sở dữ liệu.

Tuy nhiên, nếu quá trình “SWITCH LOG” xảy ra quá thường xuyên hoặc nếu kích thước của redo log không được cấu hình phù hợp, có thể gây ra một số vấn đề về hiệu suất. Dưới đây là một số cách mà “SWITCH LOG” có thể ảnh hưởng đến hiệu suất của cơ sở dữ liệu:

  1. Tăng tải I/O: Khi một redo log đầy và phải chuyển sang redo log mới, có thể gây ra một lượng I/O tăng lên do việc ghi các bản ghi redo vào redo log mới.
  2. Không thể tránh được phải chờ đợi: Trong quá trình SWITCH LOG, một số giao dịch có thể phải chờ đợi cho đến khi quá trình SWITCH LOG hoàn thành. Điều này có thể làm tăng thời gian phản hồi của các truy vấn và gây ra độ trễ.
  3. Có thể gây ra blocking: Trong một số trường hợp, quá trình SWITCH LOG có thể gây ra blocking cho các hoạt động khác trên cơ sở dữ liệu.

Theo tôi việc SWITCH LOG nên diễn ra 3-4 lần trong vòng 1H đồng hồ => nghĩa là cứ 15 phút thì thực hiện 1 lần là hợp lý đảm bảo cho hiệu năng của CSDL.

SELECT * FROM v$log_history;

## tần suất switchlog:

SELECT TO_CHAR(first_time, ‘YYYY-MM-DD HH24:MI:SS’) AS switch_time,

COUNT(*) AS switch_count

FROM v$log_history

WHERE first_time > SYSDATE – 1

GROUP BY TO_CHAR(first_time, ‘YYYY-MM-DD HH24:MI:SS’)

ORDER BY TO_CHAR(first_time, ‘YYYY-MM-DD HH24:MI:SS’) DESC;

Làm thế nào để đặt Switch log 15 phút 1 lần?

Như các bạn đã biết thì log sẽ tự động thực hiện switch khi mà file Redo online đầy để ghi ra Archivelog file và lưu vào FRA để đảm bảo an toàn.

Tính toán việc 15phut lần thì chung ta phải đặt dung lượng của Redo online log phù hợp với việc 15 phút => nghĩa là chúng ta phải biết được dung lượng Archivelog được tạo ra trong một khoảng thời gian là bao nhiêu => phụ thuộc vào các transaction…

Ví dụ: hệ thống của tôi 1h sinh ra 20GB archivelog => nghĩa là cứ 15 phút sẽ sinh ra 5GB

— Dung lượng archivelog mỗi lần thực hiện SWITCH

SELECT TO_CHAR(completion_time, ‘YYYY-MM-DD HH24:mi:ss’) AS hour,

ROUND(SUM(blocks*block_size)/1024/1024, 2) AS size_mb

FROM v$archived_log

WHERE completion_time > SYSDATE – 1

GROUP BY TO_CHAR(completion_time, ‘YYYY-MM-DD HH24:mi:ss’)

ORDER BY TO_CHAR(completion_time, ‘YYYY-MM-DD HH24:mi:ss’) DESC;

=> vậy để cho hệ thống cứ 15 phút switchlog 1 lần thì chúng ta cần phải set redo log là 5G

## kiểm tra log group và logfile

select * from v$logfile;

## tạo mới redo log group

ALTER DATABASE ADD LOGFILE GROUP 4 SIZE 5G,

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận