1. Performance của truy vấn đến Database
Khi nói đến cải thiện performance của phần mềm điều đầu tiên được nghĩ đến đó là cải thiện thời gian truy vấn đến database.
Tuy nhiên với những hệ thống lớn 1 truy vấn sẽ rất dài và phức tạp nên việc tìm được đúng vị trí gây tốn performance để cải thiện là việc quan trọng nhất.
Để hỗ trợ cho việc nay Oracle Database cung cấp 1 số function giúp phân tích và đo tốc độ của các thành phần trong 1 câu truy vấn (ví dụ như phần join, phần select của sub querry…)
2. Cách thực hiện
- Trước tiên cần chạy truy vấn sau để clear cache trên database
1 2 3 |
ALTER SYSTEM FLUSH SHARED_POOL; ALTER SYSTEM FLUSH BUFFER_CACHE; ALTER session set statistics_level=ALL; |
- Sau đó chạy truy vấn muốn kiểm tra performance. Ví dụ
1 2 |
SELECT * /**truy_van_can_kiem_tra**/ FROM account WHERE salary.mean > 1000 INNER JOIN salary ON salary.account_id = account.id |
Chú ý: /**truy_van_can_kiem_tra**/ là cách đánh dấu để hệ thống biết cần kiểm tra performance của truy vấn nào. Có thể thay đổi tên này tùy ý (ví dụ /**test_truy_van**/) nhưng phải thay đổi cả trong câu lệnh lấy dữ liệu về performance bên dưới
- Chạy truy vấn sau để lấy dữ liệu về performance của câu truy vấn cần kiểm tra
1 2 3 4 5 6 |
select * from table( dbms_xplan.display_cursor(sql_id=>(select sql_id from v$sql where sql_text like '%truy_van_can_kiem_tra%' and sql_text not like '%v$sql%'), cursor_child_no=>(select child_number from v$sql where sql_text like '%truy_van_can_kiem_tra%' and sql_text not like '%v$sql%'), format=>'ALLSTATS LAST COST') -- dbms_xplan.display_cursor(sql_id=>(select sql_id from v$sql where sql_text like '%hkb%' and sql_text not like '%v$sql%'), -- cursor_child_no=>(select child_number from v$sql where sql_text like '%hkb%' and sql_text not like '%v$sql%')) ) |
- Sau khi chạy truy vấn trên chúng ta sẽ lấy được danh sách các thành phần của câu truy vấn cần kiểm tra, thời gian đã dùng cho các thành phần đó, tỷ lệ sử dụng cpu… Từ đó biết được phần nào là phần gây tốn performance để cải thiện.
※ Với postgres SQL các bạn có thể dùng execution plan cũng có chức năng phân tích truy vấn và đo performance tương tự.