Tuning DB trong SQL




Để trở thành một Database Expert hay một Database Administrator, bạn phải trả qua một khoảng thời gian học tập và làm việc khá dài. Điều này đòi hỏi kinh nghiệm trong các Database Design đa dạng và các khóa đào tạo tốt.

Với người mới bắt đầu, các hướng dẫn được liệt kê dưới đây sẽ giúp bạn cải thiện hiệu suất cơ sở dữ liệu (Database Performance).

  • Sử dụng 3BNF Database Design đã được giải thích trong chương Các khái niệm về RDBMS.

  • Tránh chuyển đổi số-thành-ký tự bởi vì các số và ký tự là khác nhau và điều này làm giảm hiệu suất cơ sở dữ liệu.

  • Trong khi sử dụng lệnh SELECT, chỉ lấy thông tin nào cần thiết và tránh sử dụng * trong các truy vấn SELECT bởi vì nó sẽ tải hệ thống một cách không cần thiết.

  • Tạo các chỉ mục (index) một cách cẩn thận trên tất cả các bảng, là nơi bạn thường có các hoạt động tìm kiếm. Tránh sử dụng chỉ mục trên các bảng mà bạn ít sử dụng hoạt động tìm kiếm và sử dụng nhiều hoạt động chèn và cập nhật.

  • Một Full-table Scan xuất hiện khi các cột trong mệnh đề WHERE không có một chỉ mục được liên kết với chúng. Bạn có thể tránh một full-table scan bằng việc tạo một chỉ mục trên các cột mà được sử dụng như là các điều kiện trong mệnh đề WHERE của một lệnh SQL.

  • Cẩn thận với các toán tử ngang bằng với các số thực và các giá trị date/time. Cả hai loại này có thể có một sự khác nhau rất nhỏ nhưng không rõ ràng để nhìn thấy, và để tạo một so khớp chính xác là điều không thể.

  • Sử dụng Pattern Matching (so khớp mẫu) một cách thận trọng. LIKE COL% là một điều kiện WHERE hợp lệ, giảm tập hợp được trả về, và chỉ có các bản ghi với dữ liệu bắt đầu với chuỗi COL được trả về. Tuy nhiên, COL%Y lại không giảm tập hợp kết quả được trả về, bởi vì %Y không thể được ước lượng một cách hiệu quả. Nỗ lực để thực hiện việc ước lượng là quá lớn và cần được xem xét lại. Trong trường hợp này, COL% được sử dụng, và %Y bị bỏ.

  • Tinh chỉnh các truy vấn SQL của bạn bằng việc kiểm tra cấu trúc của các truy vấn (và truy vấn phụ), cú pháp SQL, để phát hiện xét xem bạn đã thiết kế bảng để hỗ trợ cho thao tác dữ liệu nhanh và các truy vấn đã viết có theo phương thức tối ưu để cho phép DBMS của bạn thao tác dữ liệu một cách hiệu quả không.

  • Với các truy vấn mà được thực thi trên một nền tảng thông thường, bạn sử dụng các thủ tục. Một thủ tục là một nhóm các lệnh SQL. Thủ tục có thể được biên dịch bởi Database Engine và sau đó được thực thi. Không giống một lệnh SQL, Database Engine không cần tối ưu hóa thủ tục trước khi nó được thực thi.

  • Bạn có thể tối ưu hóa việc có một lượng dữ liệu lớn phải tải bằng việc xóa các chỉ mục. Tưởng tượng về bảng với hàng nghìn hàng.

  • Khi thực hiện Batch transaction, thực hiện COMMIT ngay sau khi một số lượng bản ghi được tạo thay vì tạo chúng sau mỗi lần tạo bản ghi.

  • Sử dụng Defragment với Database trên một nền tảng thông thường.

Tuning Tool có sẵn

Oracle có nhiều Tool để quản lý hiệu suất lệnh SQL, trong đó có hai tool khá phổ biến, đó là:

  • Explain plan − tool xác định Access path mà sẽ được lấy khi lệnh SQL được thực thi.

  • tkprof − đánh giá hiệu suất bằng thời gian trôi qua trong suốt mỗi giai đoạn xử lý của lệnh SQL.

Nếu bạn muốn đánh giá đơn giản thời gian đã trôi qua của một truy vấn trong Oracle, bạn có thể sử dụng lệnh SET TIMING ON trong SQL*Plus.

Kiểm tra RDBMS Documentation để biết thêm chi tiết về các Tool và Defragment trên.