Upgrade to Pro — share decks privately, control downloads, hide ads and more …

善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1

善用 MySQL 及 PostgreSQL - RDBMS 的逆襲 - part1

NewSQL = RDBMS + NoSQL
HTAP = OLTP + OLAP

Yi-Feng Tzeng

March 24, 2017
Tweet

More Decks by Yi-Feng Tzeng

Other Decks in Technology

Transcript

  1. 12/52 大數據 BigData ▐ 未捨棄既有累積的知識 (RDBMS) ▐ 降低開發與維運人員的焦慮感 ( 專注,技術深化

    ) ▐ 系統異質性低 ( 出錯少,除錯易 ) ▐ 依然相容現行大數據架構 ▐ 支持容器化、混合雲、私有雲 ( 顧問性質 ) ▐ 大數據核心與對外服務層權責分離 ( 兼具安全性 ) ▐ 其實大多時候我們不需要大數據解決方案 資料多≠需要大數據解決方案,或許只是垃圾數據多 微服務 Micro- services 處理慢≠需要大數據解決方案,大多都是程式差,架構弱
  2. 13/52 Business License Elastic business Workload Technology Scale-up Application Connection

    Database File system OS Kernel Hardware Scale-out Replication Clustering Sharding Disaster Recovery Multi Regional Resiliency CONSILIENCE Architecture and more ...
  3. 14/52 Workload Processing Intensive Capacity CPU intensive Memory intensive Storage/IO

    intensive Bandwidth intensive OLTP OLAP Data warehouse Throughput Latency Memory footprint Service-level agreement Bond Performance Security Cost restriction
  4. 15/52 OLTP (On-Line Transaction Processing) ➊ 應用 : Customer-oriented ➋

    回應時間 (response time) 要求較高。 ➌ 併發 (concurrency) 要求較多。 ➍ 資料處理量 (volume) 少。 ➎ 交易 (transaction) 完整性高。 ➏ 安全性 (security) 要求較高。 Workload Processing
  5. 16/52 Workload OLAP (On-Line Analytical Processing) ➊ 應用 : Market-oriented

    ➋ 回應時間 (response time) 要求較低。 ➌ 併發 (concurrency) 要求較少。 ➍ 資料處理量 (volume) 多。 ➎ 交易 (transaction) 完整性低。 ➏ 安全性 (security) 要求較低。 Processing
  6. 17/52 Workload Data warehouse ➊ 應用 : Subject-oriented ➋ 熱資料

    (Hot) 本地、快取、粒度、一致性。 ➌ 暖資料 (Warm) 分布、快取、複製。 ➍ 冷資料 (Cold) 索引、壓縮、合併、備份。 Processing
  7. 23/52 Workload Capacity Language / Framework / Algorithm / Hardware

    300 Server → Performance +10x → 30 Server (Price cost reduction) (Maintenance cost reduction)
  8. 24/52 NewSQL / HTAP RDBMS → NoSQL → NewSQL NewSQL

    = RDBMS + NoSQL 為什麼 RDBMS 及 NoSQL 非要二擇一?
  9. 25/52 NewSQL / HTAP HTAP (Hybrid Transactional/Analytical Processing) OLTP vs.

    OLAP ? HTAP = OLTP + OLAP 為什麼 OLTP 及 OLAP 非要二擇一?
  10. 27/52 NewSQL / HTAP 1. RDBMS → NewSQL PostgreSQL 支援

    HSTORE / JSON / JSONB MySQL 支援 JSON ( 對等於 PostgreSQL 的 JSON 還是 JSONB ?) MariaDB 支援 Cassandra 引擎 Facebook 在 MySQL 引入 RocksDB (MyRocks) MS SQL Server 2016 支援 JSON (JSONB ?) Oracle 12c 支援 JSON (JSONB ?) SQLite 支援 JSON (JSONB ?) TokuDB
  11. 28/52 NewSQL / HTAP 2. NoSQL → NewSQL HBase 實現強一致性

    Cassandra 趨向強一致性 LWT (Lightweight transactions) 計畫採用 RAMP Transactions 和 Egalitarian Paxos (EPaxos)
  12. 30/52 Business License Elastic business Workload Technology Scale-up Application Connection

    Database File system OS Kernel Hardware Scale-out Replication Clustering Sharding Disaster Recovery Multi Regional Resiliency Architecture and more ... CONSILIENCE
  13. 31/52 Scale-up Hardware CPU ➊ 快取對 InnoDB 影響很大 (CPU Cache)

    。 ➋ 超執行緒 (Hyper threading) 有助益。 ➌ 通常啟用 Node Interleaving ,可避免 NUMA 問題。 ➍ 多核心處理 Ref: MySQL 5.7 Performance Scalability & Benchmarks (2015-09-23).pdf MySQL 5.5 最佳表現為 16 核心,同時連線數 128 。 MySQL 5.6 支援至少 64 核心,同時連線數處理不受影響; 但 RW 在同時處理 128 連線數後顯著下降。 MySQL 5.7 支援至少 64 核心,同時連線數處理不受影響; 解決 RW 同時處理連線數下降問題。
  14. 32/52 Scale-up Hardware Ref: SSD Deployment Strategies for MySQL (2010-04-15).pdf

    (p30) CPUs North Bridge (MCH) Memory PCIe FSB (10.6 GB/s) Intel Xeon (Older) CPUs North Bridge (IOH) Memory PCIe QBI (25.6 GB/s) Intel Xeon (Newer)
  15. 34/52 Scale-up Hardware Storage ➊ 原則上, PCIe NVMe SSD >

    SSD > HDD 。 Ref: http://agigatech.com/blog/ssds-some-cold-hard-numbers-to-flavor-your-opinions/
  16. 35/52 Scale-up Hardware Storage ➊ 原則上, PCIe NVMe SSD >

    SSD > HDD 。 ➋ 區塊大小 (Block size) 對 SSD 很重要。
  17. 39/52 Scale-up Hardware Storage ➊ 原則上, PCIe NVMe SSD >

    SSD > HDD 。 ➋ 區塊大小 (Block size) 對 SSD 很重要。 ➌ 循序寫 +RAID 的 HDD 不比 SSD 差。
  18. 40/52 Ref: SSD Deployment Strategies for MySQL (2010-04-15).pdf (p16) Ref:

    http://yoshinorimatsunobu.blogspot.tw/2009/05/tables-on-ssd-redobinlogsystem.html RAID-10 > RAID-5 (RAID 控制器很重要 ) battery backed up write cache (BBWC) MySQL 的 table 是 random-write , 但 Redo Log / Binary Log / ibdata 都是順序寫。
  19. 41/52 Scale-up Connection Connection pool (Client/Application) ➊ 不是所有應用程式都支援。 ➋ 無法得知伺服器的狀態及承載。

    ➌ 遭遇錯誤時,必須執行完整的資源清理。 ➍ 會保持連線,佔用伺服器連線數及線程快取。
  20. 45/52 Scale-up Connection Database Application 架構問題 最大連線數 100 Application 最大連線數

    100 Application 最大連線數 100 keep keep 最大連線數 200 { 剩餘連線數 0}
  21. 46/52 Scale-up Connection 架構問題 MySQL ➊ 線程模式。 ➋ 不需 Connection

    pool 就可以支持高併發。 ➌ 支持短連接使用資料庫。 ➍ 新版 5.7 建立連線的開銷更少。 5.6 版的 62.5% ; 5.5 版的 40% 。
  22. 47/52 Scale-up Application 效能通常有 99% 的問題在於 Application ➊ N+1 queries

    / ORM ➋ Bad SQL ➌ Bad Schema Design ➍ Big SQL ➎ Big Transaction ➏ Big Batch
  23. 48/52 Scale-up Application 效能通常有 99% 的問題在於 Application ➊ N+1 queries

    / ORM ➋ Bad SQL ➌ Bad Schema Design ➍ Big SQL ➎ Big Transaction ➏ Big Batch
  24. 49/52 Scale-up Application (MySQL) CHAR vs. VARCHAR ➀ 如果更新頻繁且長度不一, CHAR

    通常比較快。 ➁ 在 MySQL 5.7.7 之後, CHAR 通常比 VARCHAR 快。
  25. 50/52 Scale-up Application (MySQL) VARCHAR vs. VARCHAR ➀ 某些編碼下, VARCHAR(760)

    與 VARCHAR(770) 快得多。 ➁ 某些編碼下, VARCHAR(190) 比 VARCHAR(200) 快得多。 ➂ 不過在 MySQL 5.7.7 之後,前兩者幾乎沒什麼差別。 雖然只差 10 ,但效能在這長度間有個跳躍 雖然只差 10 ,但效能在這長度間有個跳躍
  26. 51/52 Scale-up Application INDEX ➀ Primary Index 對 MySQL 很重要,循序式比亂序式快。

    ➁ Index 愈多不一定愈好。 ➂ Composite Index 需善用。