閱讀70 返回首頁    go 阿裏雲 go 技術社區[雲棲]


7.5 實時寫入優化__第七章 性能優化和診斷_使用手冊_分析型數據庫-阿裏雲

Insert 語句最優寫法

Insert語句標準語法如下:

  1. INSERT [IGNORE]
  2. [INTO] tbl_name
  3. [(col_name,...)]
  4. {VALUES | VALUE}

為了利用分析型數據庫的高性能寫入能力,建議寫入時進行如下改造:

  • 采用批量寫入(batch insert)模式,即每次在VALUES部分添加多行數據,一般建議每次批量寫入數據量大約為16KB,以提高網絡和磁盤吞吐。
  • 如果對一行的所有列都進行插入,則去除col_name並保證values順序與表結構中的col_name順序一致,以降低網絡帶寬耗用。
  • 保持主鍵相對有序。AnalyticDB的insert語句要求必須提供主鍵,且主鍵可以為複合主鍵。當確定複合主鍵時,根據業務含義調整複合主鍵中各個列的次序,從業務層麵保證插入時主鍵是嚴格遞增或近似遞增的,也可以提升實時寫入速度。
  • 增加ignore關鍵字。執行不帶ignore關鍵字的insert sql,當主鍵衝突時,後續數據會覆蓋之前插入的數據;帶上ignore關鍵字,則主鍵衝突時,會保留之前插入的數據而自動忽略新數據。如果業務層沒有數據覆蓋的語義要求,則建議所有insert sql都加上ignore關鍵字,以減小覆蓋數據帶來的性能開銷。

按hash分區列聚合寫入

分析型數據庫需要對數據進行分區存儲,當一次Batch insert中含有屬於不同分區的多行數據時,將會耗費大量CPU資源進行分區號計算。因此建議在寫入程序中提前計算好每行數據的分區號,並且將屬於同一分區的多行數據組成一個批次,一次性插入。

實現聚合寫入目前主要有兩種途徑:其一,用戶自行實現該聚合方法,對分區號的計算規則為

partition_num = CRC32(hash_partition_column_value) mod m

其中hash_partition_column_value是分區列的值,m是分區總數。

其二,采用阿裏雲數據集成產品進行實時數據實時同步。(專有雲中“大數據開發套件”的“數據同步”任務即為采用“數據集成”工具實現)

提前進行optimize table

分析型數據庫的optimize table是指對實時寫入的數據進行索引構建並生成高度優化的文件結構的過程。

分析型數據庫為實時寫入的數據隻建立了簡單的索引,在進行optimize table之後則會建立相對複雜但是功能更強、性能更佳的索引;在適當時候進行optimize table是提升查詢性能的好方法。

目前有兩種方法進行基線合並:

其一,自動optimize table。目前係統每天會自動進行一次optimize table(一般在每晚20:00開始)。

其二,手動進行optimize table。AnalyticDB提供了optimize命令,用戶可以手動發送該命令,強製係統立刻進行基線合並。命令格式如下:

  1. optimize table <table_name>

最後更新:2016-11-23 16:04:20

  上一篇:go 7.4 查詢SQL優化__第七章 性能優化和診斷_使用手冊_分析型數據庫-阿裏雲
  下一篇:go 8.1 業務係統連接並進行查詢__第八章 在生產中使用分析型數據庫_使用手冊_分析型數據庫-阿裏雲