Giới thiệu về Sql Tuning
- Câu lệnh Sql được viết để truy xuất / tìm nạp dữ liệu từ cơ sở dữ liệu. Chúng tôi muốn câu lệnh sql của mình chạy nhanh (điều chỉnh sql) và cung cấp kết quả sau vài giây.
- Một sql thiết kế kém có thể làm chậm toàn bộ hoạt động của cơ sở dữ liệu và khiến toàn bộ hoạt động tạm dừng. Viết SQL hiệu quả khó hơn nhiều so với viết SQL đúng về mặt chức năng. điều chỉnh hiệu suất sql có thể cải thiện đáng kể tình trạng và hiệu suất của hệ thống.
- Chìa khóa để điều chỉnh SQL là giảm thiểu dữ liệu mà nó truy cập để cung cấp kết quả. Chúng tôi có thể giảm thiểu dữ liệu mà nó truy cập để cung cấp kết quả thông qua đường dẫn tìm kiếm tối ưu.
Một ví dụ đơn giản sẽ là
select * from dept where emp=10
- Bây giờ truy vấn này sẽ phải tìm kiếm toàn bộ bảng để tìm ra dữ liệu ở đó emp =10. Vì vậy, nó phải truy cập toàn bộ bảng
- Bây giờ nếu chúng ta tạo chỉ mục cho cột trống, thì nó có thể truy cập chỉ mục và nhận kết quả. Vì vậy, ở đây nó truy cập ít dữ liệu hơn
12 bước để thực hiện điều chỉnh Sql trong Oracle
Đây là mẹo chung để điều chỉnh hiệu suất sql
(1) Trước tiên, bạn phải có tất cả các công cụ cần thiết để điều chỉnh sql. Bạn phải có thông tin tốt về truy tìm, định dạng theo dõi, giải thích kế hoạch, đọc kế hoạch giải thích trong oracle.
Kiến thức tốt về các phương pháp nối khác nhau có sẵn trong Oracle và cách sử dụng chúng hiệu quả
(2) Đọc ít dữ liệu hơn và I / O hiệu quả.
Bạn đọc càng nhiều dữ liệu cho câu lệnh sql, thì nó càng cần nhiều chốt hơn và nó làm chậm hiệu suất. vì vậy nó phải luôn thực hiện ít lần đọc logic hơn
Viết câu lệnh sql hợp lý ở những bộ lọc thích hợp. Kiểm tra số lượng hàng trong các bảng khác nhau có liên quan và tìm ra phương pháp tốt nhất để tạo câu lệnh sql
(2) Sử dụng các chỉ mục Oracle tốt
Các chỉ mục B-Tree và chỉ mục Bitmap có thể được sử dụng để tăng hiệu suất của các truy vấn nếu dữ liệu trả về nhỏ hơn 10%. Nhưng chúng ta phải cẩn thận trong khi tạo chỉ mục vì nó cũng cần được duy trì cho hoạt động chèn, cập nhật và xóa. Vì vậy, việc tạo một chỉ mục sẽ tạo ra chi phí chung cho nhiều thứ. Vì vậy, chúng tôi phải kiểm tra cẩn thận tác động của việc tạo chỉ mục.
(3) Tránh sql làm vô hiệu hóa việc sử dụng chỉ mục
SQL vô hiệu hóa chỉ mục
(a) Các hàm (to_char (), to_date (), v.v.)
Khắc phục:di chuyển hàm sang phía “biến hằng / liên kết”
(b) Kiểu Truyền
Trong SQL
trong đó emp_no =10 (emp_no là varchar2)
Trong PL / SQL
trong đó emp_no =v_emp_num (v_emp_num là một số)
Các sửa đổi
và id + 0 =111
và date + 1 =sysdate (thử date =sysdate - 1)
Khắc phục:Thay đổi để tránh điều đó
(4) Luôn sử dụng biến ràng buộc trong ứng dụng. Nếu bạn không sử dụng biến bind trong oracle, sql sẽ được phân tích cú pháp mọi lúc và sẽ ảnh hưởng đến hiệu suất cơ sở dữ liệu.
(5) CÔNG ĐOÀN vs HOẶC. Sử dụng UNION cho các truy vấn có hai đường dẫn thực thi rõ ràng; mỗi trả về một số lượng hàng khá nhỏ. Không sử dụng union cho các truy vấn có khả năng trả về một số lượng lớn các hàng vì tất cả các hàng cần được sắp xếp và hầu hết chúng sẽ bị loại bỏ. HOẶC có xu hướng vô hiệu hóa chỉ mục
(6) Sử dụng thống kê trình tối ưu hóa chính xác trên bảng để có được kế hoạch tối ưu.
(7) Nếu bạn đang sử dụng hàm trên biểu thức với điều kiện, hãy kiểm tra xem có chỉ mục dựa trên hàm trên cột đó hay không. Nếu nó không có mặt, chỉ mục sẽ không được sử dụng
(8) Sử dụng tồn tại so với trong và Không tồn tại so với không trong cho các truy vấn con có liên quan
(9) Tránh thực hành mã hóa kém
Một số mẹo
(a) Tránh kết hợp Descartes. Đảm bảo rằng tất cả các bảng được yêu cầu trong các truy vấn đều cần thiết và được liên kết với nhau
(b) Sử dụng Giải mã để tránh nhiều lần chuyển đến cơ sở dữ liệu
(c) Cố gắng tránh tham gia bên ngoài
(d ) Đôi khi việc phân tách logic thành các phần nhỏ giúp công việc nhanh hơn
(10) Nếu cố gắng sử dụng chế độ xem phức tạp, hãy kiểm tra xem có thể sử dụng các bảng cơ sở để thay thế không vì chế độ xem có xu hướng làm cho hiệu suất kém
(11) Sử dụng UNION ALL Vs UNION nếu bạn biết rằng dữ liệu được truy xuất sẽ không có các hàng trùng lặp
(12) Sử dụng các gợi ý để tối ưu hóa kế hoạch thực hiện. Đôi khi, gợi ý có thể được sử dụng để thay đổi kế hoạch thực thi cho truy vấn sao cho đi theo con đường tối ưu nhất.
Một số lần xem lén liên kết tạo ra một kế hoạch xấu, vì vậy, trong trường hợp đó, việc đưa ra gợi ý cần thiết để sửa chữa kế hoạch sẽ giúp nhận được hiệu suất tốt mọi lúc
Các gợi ý phổ biến nhất là
/ * + LEADING (bí danh bảng) * / chỉ định bảng để bắt đầu tham gia
/ * + FIRST_ROWS * / rất tốt cho nội dung trực tuyến màn hình - ủng hộ NESTED LOOPS
/ * + INDEX (bí danh bảng. tên chỉ mục) * / chỉ định chỉ mục bạn muốn sử dụng. Lưu ý:nếu chỉ mục bị giảm và được tạo lại và thay đổi tên thì gợi ý không còn hợp lệ.
/ * + USE_NL (bí danh bảng 1 bí danh bảng 2) * / yêu cầu trình tối ưu hóa sử dụng Nối vòng lặp lồng nhau cho hai bảng được chỉ định
Tránh gợi ý về trình tối ưu hóa không cần thiết và sử dụng chúng một cách cẩn thận
Đây là một số mẹo để tránh các vấn đề và thực hiện điều chỉnh sql. Sql điều chỉnh là một đại dương lớn và bạn có thể học mọi thứ chỉ bằng cách luyện tập. May mắn nhất !!
Cũng đã đọc
https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm