數據庫優化
數據庫選型
阿里云擁有豐富的云數據庫產品選項,涵蓋關系型數據庫、非關系型數據庫、數據倉庫、數據庫生態工具四大板塊,可以為企業數據生產和集成、實時處理、分析與發現、開發與管理提供全鏈路生命周期的服務。主要關系型數據庫包括云數據庫 RDS MySQL 版、云數據庫 RDS PostgreSQL 版、云數據庫 RDS SQL Server 版、云原生數據庫 PolarDB MySQL 版、云原生數據庫 PolarDB PostgreSQL 版、云原生數據庫 PolarDB 分布式版等,主要NoSQL數據庫包括云數據庫 Tair(兼容 Redis)、云數據庫 MongoDB 版、云原生內存數據庫 Tair和云原生多模數據庫 Lindorm等。數據庫的選擇需要根據客戶上云以及上云后不同業務發展階段、不同訪問量、業務規模、不同業務特點來綜合考慮,以更好地適配客戶的業務訴求。以MySQL為例,比如在初創或剛上云的階段,利用RDS MySQL 高可用實例及其主從復制滿足基礎容災需求,隨著業務發展生產環境可能需要利用RDS讀寫分離來承載 OLTP 讀寫壓力,在高并發、機制彈性、海量存儲的場景下可能需要PolarDB 系列來滿足業務要求。
常見問題及優化
慢SQL問題及優化:導致慢SQL的原因很多,需要根據實際情況來優化。常見問題如下:SQL架構設計和庫表索引設計會影響查詢性能;不合理的設計,如表結構設計不合理、索引缺失、掃描行數過多等,都可能會造成慢SQL,根據實際業務情況優化SQL;數據庫實例選型不滿足業務增長的需求,造成資源滿負荷達到實例瓶頸,需要升級實例規格;如果有大批量的數據查詢和導入等操作,也會導致SQL執行變慢,可以考慮在業務低峰期執行大批量操作,或將大批量操作拆分后分批執行。上面是一些常見問題,更多的問題和優化可以利用數據庫自治服務 DAS(Database Autonomy Service)來完成。
活躍線程堆積問題及優化:如果出現大量的活躍連接數,說明出現了SQL堆積和響應變慢,嚴重時會導致實例停止響應。同時活躍連接消耗連接池,當達到上限時會導致新的連接無法建立,數據庫無法處理新的應用請求。常見問題如下:慢SQL堆積問題,如果有很多掃描行數太多的SQL,容易導致活躍連接數升高,可以使用SQL限流功能或結束會話,降低慢SQL的影響;表緩存 (Table Cache) 不足時,會導致大量SQL處于Opening table狀態,在QPS過高或者表很多的場景中容易出現,可以考慮調整參數table_open_cache和table_open_cache_instances解決;當出現元數據鎖(MDL)時,會導致大量SQL處于Waiting for table metadata lock的狀態,在DDL prepare和commit階段,DDL語句需要獲取MDL鎖,如果表上有未提交事務或慢SQL,會阻塞DDL操作,DDL操作又會阻塞其他的SQL,最終導致活躍線程數升高,可以通過中止未提交事務、慢SQL或正在執行的DDL來解決問題。
內存、磁盤、I/O等問題及優化:其他典型的問題還包括由于內存、磁盤、I/O等引起的問題,可能和Buffer Pool、臨時表、索引和 Binlog 等諸多因素相關,更多的問題和優化可以利用數據庫自治服務 DAS(Database Autonomy Service)來完成。
數據庫自治服務 DAS(Database Autonomy Service)是一種基于機器學習和專家經驗實現數據庫自感知、自修復、自優化、自運維及自安全的云服務,幫助用戶消除數據庫管理的復雜性及人工操作引發的服務故障,有效保障數據庫服務的穩定、安全及高效。利用DAS可以有效地發現并解決性能相關問題,其中的一鍵診斷、實時性能、鎖分析、容量評估、性能洞察、性能趨勢、慢SQL、SQL洞察和審計和自動SQL限流等功能可以幫助用戶更好地洞察和優化數據庫性能。