Kiến thức quản trị

Case Study tối ưu Database: Giải quyết bài toán Insert dữ liệu 10 tỷ row vào Database

Case Study tối ưu Database 01

Trong các hệ thống lớn (ví dụ: các hệ thống của Viễn thông), các bạn DBA sẽ phải đối mặt với các bài toán xử lý hàng tỷ bản ghi dữ liệu. Hôm nay tôi chia sẻ Case Study tối ưu Database làm thế nào để Insert hàng tỷ bản ghi một cách nhanh nhất, an toàn nhất.

1. Mô tả Case Study tối ưu Database cần 

Bạn cần Insert 10 tỷ bản ghi dữ liệu vào CSDL. Bạn sẽ cần làm hoặc chuẩn bị gì để công việc này tiến ra một cách nhanh chóng ?
Giả sử môi trường trong bài toán trên như sau:
– OS: Linux 7.2
– Database: Oracle 19c.

2. Phương án xử lý Case Study tối ưu Database

Để thực hiện bài toán trên chúng ta có rất nhiều cách tiếp cận, hôm nay tôi sẽ giải quyết bài toán từ các yếu tố THIÊN THỜI – ĐỊA LỢI – NHÂN HÒA.

2.1. Áp dụng yếu tố THIÊN THỜI:

Khi chúng ta bắt đầu giải quyết một công việc, vấn đề “thời điểm” có thể ảnh hưởng rất lớn đến kết quả. Trong bài toán trên, việc Insert 1 tỷ bản ghi là một công việc lớn, do đó người quản trị nên chọn thời điểm tải thấp, cụ thể hơn nên tránh các khung thời gian:
  • Tránh khung thời gian có lịch backup
  • Tránh khung thời gian có các job tự động của hệ thống (các job auto maintain mặc định chạy từ 10h đêm đến 2h sáng các ngày trong tuần + các job do người dùng khai báo).
  • Tránh khung thời gian ứng dụng thường có hoạt động “nhộn nhịp”

2.2. Áp dụng yếu tố ĐỊA LỢI.

Địa lợi ở đây chính là việc chúng ta sử dụng được điểm mạnh của thiết kế Cơ sở dữ liệu, thiết kế hệ thống.
Tại đây chúng ta cần Insert 1 lượng lớn dữ liệu (đơn vị hàng tỷ row), nhìn từ phía kiến trúc của Oracle chúng ta có thể thấy ngay mấy vấn đề sau:
  • Nếu được hãy chuẩn bị, sắp xếp dữ liệu cần Inser một cách khoa học. Ví dụ bạn có cần insert từ 1 file csv dữ liệu trong 10 năm, nếu bạn có thể tách thành 10 file riêng, mỗi file 1 năm thì rất tốt. Việc này giúp bạn quản trị được công việc một cách rành mạch, dễ dàng xử lý đa luồng và kiểm soát từng phần việc đã hoàn thành.
  • Câu lệnh ở đây là Insert (một câu lệnh thuộc nhóm DML), câu lệnh này sẽ sinh ra Redo. Như vậy việc đầu tiên cần nghĩ tới là thiết kế Redo đáp ứng các vấn đề sau:
  • Đặt Redo tại phân vùng có tốc độ đọc ghi cao
  • Thiết kế dung lượng Redo log để không bị switch log quá nhiều.
  • Ngoài việc thiết kế phân vùng và dung lượng Redo log group, chúng ta cũng tìm các phương án để giảm thiểu việc sinh Redo log. Một số phương án có thể làm tại đây:
  • Cấu hình Nologging cho Table đang được Insert.
  • Sử dụng Hint APPEND trong câu lệnh Insert
  • Sử dụng SQLLoader Direct Path Load
  • Trong trường hợp sử dụng SQLLoader Convention Load thì không để tần suất COMMIT quá dày đặc.
  • Tận dụng tối đa năng lực của hệ thống phần cứng:
  • Dựa vào số Core của Server để thiết lập số luồng Parallel cho quá trình Insert dữ liệu.
  • Chuyển bảng cần Insert sang phân vùng có tốc độ đọc ghi cao.
  • Kiểm tra hệ thống để đảm bảo không gặp các vấn đề như (hệ thống đang sử dụng swap, hệ thống có các phân vùng log, trace, archivelog cần đầy…)
  • Cấu hình tham số bộ nhớ SGA, PGA tận dụng tối đa tài nguyên của phần cứng.
  • Thực hiện cấp phát sẵn dung lượng datafile chứa Table được Insert dữ liệu.
  • Do đã biết trước việc dữ liệu sẽ tăng trưởng mạnh, nếu để data file tự động extend sẽ ảnh hưởng tới toàn bộ quá trình. Chúng ta hãy chủ động cấp phát sẵn dung lượng cho các data file.
  • Thực hiện disable các Index, constraint, trigger trên bảng (nếu được). Việc disable toàn bộ Index, constraint, trigger sẽ tăng tốc đáng kể quá trình thêm dữ liệu.
  • Thiết kế bảng partition. Với các bảng có nhu cầu đẩy rất nhiều dữ liệu như trên, chúng ta cần cân nhắc phương án partition. Một số lợi ích có thể thấy khi sử dụng partition table tại đây:
  • Có thể đẩy dữ liệu song song vào các partion, không ảnh hưởng lẫn nhau.
  • Có thể disable các local index mà không ảnh hưởng đến local index của partition khác.
  • Trường hợp sử dụng Oralce RAC thì phân vùng chứa file dữ liệu (giả sử file csv) phải sử dụng shared storage để tất cả các Node trong Oracle RAC đều có thể sử dụng đồng thời.

2.3. Áp dụng yếu tố NHÂN HÒA.

  • Chọn người quản trị có yếu tố tỉ mỉ, thận trọng để làm việc, các anh em mùng 1 ăn vịt hoặc đi cắt tóc có thể chỉ cho xem, không nên tham gia trực tiếp làm việc.
  • Thực hiện giám sát trong quá trình hệ thống hoạt động, tránh những lỗi cơ bản như: đầy phân vùng, đầy tablespace, đầy archive log…

3. Các kiến thức về Oracle, SQL Server các bạn có thể tự học để chuẩn bị cho Case Study tối ưu Database

  • Các kiến thức tự học Oracle và SQL nếu bạn cần: link xem tại đây
  • Nếu bạn cần dịch vụ hỗ trợ cơ sở dữ liệu chuyên gia cho doanh nghiệp: click đây
  • Nếu bạn cần Mentor đồng hành trong sự nghiệp DBA:click đây

Leave a Reply

avatar
  Subscribe  
Notify of