【云圖說】第132期 小云妹帶您快速玩轉RDS實例操作(2)——刪除與退訂
835
2025-04-04
數據庫使用過程中,SQL調優是提升數據庫性能的重點。SQL調優的唯一目的是“資源利用最大化”,即CPU、內存、磁盤IO、網絡IO四種資源利用最大化。所有調優手段都是圍繞資源使用開展的。所謂資源利用最大化是指SQL語句盡量高效,節省資源開銷,以最小的代價實現最大的效益。本章介紹典型的SQL調優的方法和案例。
調優流程
對慢SQL語句進行分析,通常包括以下步驟:
1. 收集SQL中涉及到的所有表的統計信息。在數據庫中,統計信息是規劃器生成計劃的源數據。沒有收集統計信息或者統計信息陳舊往往會造成執行計劃嚴重劣化,從而導致性能問題。從經驗數據來看,10%左右性能問題是因為沒有收集統計信息。具體請參見更新統計信息。
通過查看執行計劃來查找原因。如果SQL長時間運行未結束,通過EXPLAIN命令查看執行計劃,進行初步定位。如果SQL可以運行出來,則推薦使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看執行計劃及實際運行情況,以便更精準地定位問題原因。有關執行計劃的詳細介紹請參見SQL執行計劃介紹。
3.?審視和修改表定義。
4. 針對EXPLAIN或EXPLAIN PERFORMANCE信息,定位SQL慢的具體原因以及改進措施,具體參見典型SQL調優點。
5. 通常情況下,有些SQL語句可以通過查詢重寫轉換成等價的,或特定場景下等價的語句。重寫后的語句比原語句更簡單,且可以簡化某些執行步驟達到提升性能的目的。查詢重寫方法在各個數據庫中基本是通用的。經驗總結:SQL語句改寫規則介紹了幾種常用的通過改寫SQL進行調優的方法。
典型調優案例
選擇合適的分布列
現象描述:
表定義如下:
CREATE TABLE t1 (a int, b int); CREATE TABLE t2 (a int, b int);
執行如下查詢:
SELECT * FROM t1, t2 WHERE t1.a = t2.b;
優化分析:
如果將a作為t1和t2的分布列:
CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a); CREATE TABLE t2 (a int, b int) DISTRIBUTE BY HASH (a);
則執行計劃將存在“Streaming”,導致DN之間存在較大通信數據量。
如果將a作為t1的分布列,將b作為t2的分布列:
CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a); CREATE TABLE t2 (a int, b int) DISTRIBUTE BY HASH (b);
則執行計劃將不包含“Streaming”,減少DN之間存在的通信數據量,從而提升查詢性能。
建立合適的索引。
現象描述:
查詢與銷售部所有員工的信息:
SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id;
優化分析:
建議在places.place_id和states.state_id列上建立2個索引。
更多其他調優案例請參考調優案例。
云小課 云數據庫 GaussDB(for openGauss) 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。