新聞中心
數(shù)據庫管理系統(tǒng)(DBMS)是當今企業(yè)架構中不可或缺的一部分。DBMS的重要性在于它是企業(yè)的數(shù)據存儲庫,是企業(yè)決策制定的核心。因此,數(shù)據庫系統(tǒng)的運行方面必須得到特別關注,因為在任何時候如果出現(xiàn)了性能問題就可能對企業(yè)的生產力和效率產生負面影響。本文將深入探討如何解決數(shù)據庫系統(tǒng)瓶頸問題。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網綜合服務,包含不限于成都網站設計、成都做網站、永登網絡推廣、重慶小程序開發(fā)、永登網絡營銷、永登企業(yè)策劃、永登品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供永登建站搭建服務,24小時服務熱線:18980820575,官方網址:www.cdcxhl.com
一、增加內存
在數(shù)據庫系統(tǒng)中,內存是非常重要的組成部分。利用內存可以大大提高數(shù)據庫的性能,減輕磁盤訪問的負擔,因為內存的訪問速度比硬盤快得多。通過安裝更多的內存,可以使系統(tǒng)更快速地響應請求并處理更多的數(shù)據。
二、合理設置索引
索引是將表分割成小的段,使數(shù)據庫能夠快速查找特定行的對象。索引的不正確使用可能會導致系統(tǒng)瓶頸,因為它會影響數(shù)據庫的性能。正確的索引設置可以顯著提高查詢性能,減少不必要的查詢時間。
三、優(yōu)化查詢語句
優(yōu)化查詢語句可以提高數(shù)據庫的性能。對查詢語句進行分析并適當調整這些語句能夠減少對系統(tǒng)的負擔和訪問數(shù)據庫的時間,進而提高數(shù)據查詢的速度。
四、重構表結構
重構表結構可以有效的減少表的大小和提高查詢效率,因此可以提高數(shù)據庫的整體性能。在重構表結構的過程中,可以考慮將大型表進行拆分、合并或部分拆分,這可以降低查詢時間和增加執(zhí)行效率。
五、定期清理緩存
定期清理緩存可以幫助懸掛在數(shù)據庫系統(tǒng)中的資源得到釋放,以便他們能夠用于其他應用程序。當緩存池被清空時,這些資源將再次被重新加載。這樣的操作可以提高數(shù)據庫的性能,尤其對于那些長時間運行的服務器而言。
六、升級硬件
如果在進行以上操作后仍然遇到瓶頸,就可以考慮升級硬件,如更快的磁盤、更好的CPU、更多的RAM等。這些技術可以幫助數(shù)據庫系統(tǒng)實現(xiàn)更好的性能,但是它們的價格相對較高。
七、監(jiān)控數(shù)據庫
對數(shù)據庫進行定期監(jiān)控是提高數(shù)據庫系統(tǒng)性能的重要手段。通過監(jiān)控數(shù)據庫,可以發(fā)現(xiàn)哪些操作導致瓶頸,為優(yōu)化鋪平道路。此外,定期監(jiān)控可以幫助發(fā)現(xiàn)數(shù)據庫故障,有助于及早修復以避免數(shù)據丟失。
結論
通過上述方法可以較好的解決數(shù)據庫系統(tǒng)瓶頸問題,提高系統(tǒng)性能,減少等待時間,避免數(shù)據丟失及系統(tǒng)故障。對于那些面臨開銷增加的效益糾葛的企業(yè),這些方法不一定適用于所有情況??梢愿鶕煌摹捌款i”問題的性質選擇最為適合的方法。無論是增加內存、優(yōu)化查詢語句、重構表結構等,甚至是升級硬件,在整個措施中,都需要綜合考慮并進行實證評估來獲得更佳效果。
成都網站建設公司-創(chuàng)新互聯(lián)為您提供網站建設、網站制作、網頁設計及定制高端網站建設服務!
50種方法巧妙優(yōu)化你的SQLServer數(shù)據庫(一)
查詢速度慢的原因很多,常見如下幾種:
、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程序設計的缺陷)
2、I/O吞吐量小,形成了瓶頸效應。
3、沒有創(chuàng)建計算列導致查詢不優(yōu)化。
4、內存不足
5、網絡速度慢
6、查詢出的數(shù)據量過大(可以采用多次查詢,其他的方法降低數(shù)據量)
7、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷)
8、sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。
9、返回了不必要的行和列
、查詢語句不好,沒有優(yōu)化
可以通過如下方法來優(yōu)化查詢 :
1、把數(shù)據、日志、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2023不在支持。數(shù)據量(尺寸)越大,提高I/O越重要.
2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse)
3、升級硬件
4、根據查詢條件,建立索引,優(yōu)化索引、優(yōu)化訪問方式,限制結果集的數(shù)據量。注意填充因子要適當(是使用默認值0)。索引應該盡量小,使用字節(jié)數(shù)小的列建索引好(參照索引的創(chuàng)建),不要對有限的幾個值的字段建單一索引如性別字段
5、提高網速;
6、擴大服務器的內存,Windows 2023和SQL server 2023能支持4-8G的內存。配置虛擬內存:虛擬內存大小應基于計算機上并發(fā)運行的服務進行配置。運行 Microsoft SQL Server? 2023 時,可考慮將虛擬內存大小設置為計算機中安裝的物理內存的 1.5 倍。如果另外安裝了全文檢索功能,并打算運行 Microsoft 搜索服務以便執(zhí)行全文索引和查詢,可考慮:將虛擬內存大小配置為至少是計算機中安裝的物理內存的 3 倍。將 SQL Server max server memory 服務器配置選項配置為物理內存的 1.5 倍(虛擬內存大小設置的一半)。
7、增加服務器CPU個戚鎮(zhèn)陵數(shù);但是必須明白并行處理串行處理更需要資源例如內存。使用并行還是串行程是MsSQL自動評估選擇的。單個任務分解成多個任務,就可以在處理器上運行。例如耽擱查詢的排序、連接、掃描和GROUP BY字句同時執(zhí)行,SQL SERVER根據系統(tǒng)的負載情況決定的并行等級,復雜的需要消耗大量的CPU的查詢最適合并行處理。但是更新操作UPDATE,INSERT,DELETE還不能并行處理。
8、如果是使用like進行查詢的話,簡單的使用index是不行的,但是全旅手文索引,耗空間。 like ‘a%’ 使用索引 like ‘%a’ 不使用索引用 like ‘%a%’ 查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。對于字段的值很長的建全文索引。
9、DB Server 和APPLication Server 分離;OLTP和OLAP分離
、分布式分區(qū)視圖可用于實現(xiàn)數(shù)據庫服務器聯(lián)合體。聯(lián)合體是一組分開管理的服務器,但它們相互協(xié)作分擔系統(tǒng)的處理負荷。這種通過分區(qū)數(shù)據形成數(shù)據庫服務器聯(lián)合體的機制能夠擴大一組服務器,以支持大型的多層 Web 站點的處理需要。有關更多信息,參見設計聯(lián)合數(shù)據庫服務器。(參照SQL幫助文件’分區(qū)視圖’)
a、在實現(xiàn)分區(qū)視圖之前,必須先水平分區(qū)表
b、在創(chuàng)建成員表后,在每個成員服務器上定義一個分布式分區(qū)視圖,并且每個視圖具有相同的名稱。這樣,引用分布式分區(qū)視圖名的查詢可以在任何一個成員服務器上運行。系統(tǒng)操作如同每個成員服務器上都有一個原始表的復本一樣,但其實每個服務器上只有一個成員表和一個分布式分區(qū)視圖。數(shù)據的位置對應用程高戚序是透明的。
、重建索引 DBCC REINDEX ,DBCC INDEXDEFRAG,收縮數(shù)據和日志 DBCC SHRINKDB,DBCC SHRINKFILE. 設置自動收縮日志.對于大的數(shù)據庫不要設置數(shù)據庫自動增長,它會降低服務器的性能。 在T-sql的寫法上有很大的講究,下面列出常見的要點:首先,DBMS處理查詢計劃的過程是這樣的:
1、 查詢語句的詞法、語法檢查
2、 將語句提交給DBMS的查詢優(yōu)化器
3、 優(yōu)化器做代數(shù)優(yōu)化和存取路徑的優(yōu)化
4、 由預編譯模塊生成查詢規(guī)劃
5、 然后在合適的時間提交給系統(tǒng)處理執(zhí)行
6、 最后將執(zhí)行結果返回給用戶其次,看一下SQL SERVER的數(shù)據存放的結構:一個頁面的大小為8K(8060)字節(jié),8個頁面為一個盤區(qū),按照B樹存放。
、Commit和rollback的區(qū)別 Rollback:回滾所有的事物。 Commit:提交當前的事物. 沒有必要在動態(tài)SQL里寫事物,如果要寫請寫在外面如: begin tran exec(@s) commit trans 或者將動態(tài)SQL 寫成函數(shù)或者存儲過程。
、在查詢Select語句中用Where字句限制返回的行數(shù),避免表掃描,如果返回不必要的數(shù)據,浪費了服務器的I/O資源,加重了網絡的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯(lián)接訪問表,后果嚴重。
、SQL的注釋申明對執(zhí)行沒有任何影響
數(shù)據庫架構選型與落地,看這篇就夠了
隨著時間和業(yè)務的發(fā)展,數(shù)據庫中的數(shù)據量增長是不可控的,庫和表中的數(shù)據會越來越大,隨之帶來的是更高的
磁盤
、
IO
、
系統(tǒng)開銷
,甚至
性能
上的瓶頸,而單臺服務器的
資源終究是有限
的。
因此在面對業(yè)務擴張過程中,應用程序對數(shù)據庫系統(tǒng)的
健壯性
,
安全性
,
擴展性
提出了更高的要求。
以下,我從數(shù)據庫架構、選型與落地來讓大家入門。
數(shù)據庫會面臨什么樣的挑戰(zhàn)呢?
業(yè)務剛開始我們只用單機數(shù)據庫就夠了,但隨著業(yè)務增長,數(shù)據規(guī)模和用戶規(guī)模上升,這個時候數(shù)據庫會面臨IO瓶頸、存儲瓶頸、可用性、安全性問題。
為了解決上述的各種問題,數(shù)據庫衍生了出不同的架構來解決不同的場景需求。
將數(shù)據庫的寫操作和讀操作分離,主庫接收寫請求,使用多個從庫副本負責讀請求,從庫和主庫同步更新數(shù)據保持數(shù)據一致性,從庫可以水平擴展,用于面對讀請求的增加。
這個模式也就是常說的讀寫分離,針對的是小規(guī)模數(shù)據,而且存在大量讀操作的場景。
因為主從的數(shù)據是相同的,一旦主庫宕機的時候,從庫可以
切換為主庫提供寫入
,所以這個架構也可以提高數(shù)據庫系統(tǒng)的
安全性
和
可用性
;
優(yōu)點:
缺點:
在數(shù)據庫遇到
IO瓶頸
過程中,如果IO集中在某一塊的業(yè)務中,這個時候可以考慮的就是垂直分庫,將熱點業(yè)務拆分出去,避免由
熱點業(yè)務
的
密集IO請求
影響了其他正常業(yè)務,所以垂直分庫也叫
業(yè)務分庫
。
優(yōu)點:
缺點:
在數(shù)據庫遇到存儲瓶頸的時候,由于數(shù)據量過大造成索引性能下降。
這個時候可以考慮將數(shù)據做水平拆分,針對數(shù)據量巨大的單張表,按照某種規(guī)則,切分到多張表里面去。
但是這些表還是在同一個庫中,所以庫級別的數(shù)據庫操作還是有IO瓶頸(單個服務器的IO有上限)。
所以水平分嘩槐尺表主要還是針對
數(shù)據量較大
,整體業(yè)務
請求量較低
的場景。
優(yōu)點:
缺點:
四、分庫分表
在數(shù)據庫遇到存儲瓶頸和IO瓶頸的時候,數(shù)據量過大造成索引性能下降,加上同一時間需要處理大規(guī)模的業(yè)務請求,這個時候單庫的IO上限會限制處理效率。
所以需要將單張表的數(shù)據切分到多個服務器上去,每個服務器具有相應的庫與表,只是表中數(shù)據不同。
分庫分表能夠有效地緩解單機和單庫的
性能瓶頸和壓力
,突破IO、連接數(shù)、硬件資源等的瓶頸。
優(yōu)點:
缺點:
注:分庫還是分表核心關鍵是有沒有IO瓶頸
。
分片方式都有什么呢?
RANGE(范圍分片)
將業(yè)務表中的某個
關鍵字段排序
后,按照順序從0到10000一個表,10001到20230一個表。最常見的就是
按照時間切分
(月表、年表)。
比如將6個月前,甚至一年前的數(shù)據切出去放到另外的一張表,因為隨著時間流明睜逝,這些表的數(shù)據被查詢的概率變小,銀行的交易記錄多數(shù)是采用這種方式。
優(yōu)點:
缺點:
HASH(哈希分片)
將訂單作為主表,然后將其相關的業(yè)務表作為附表,取用戶id然后
hash取模
,分配到不同的數(shù)據表或者數(shù)據庫上。
優(yōu)點:
缺點:
講到這里,我們已經知道數(shù)據庫有哪些架構,解決的是哪些問題,因此,
我們在日常設計中需要根據數(shù)據的特點,數(shù)據的傾向性,數(shù)據的安全性等來選擇不同的架構
。
那么,我們應該如何選擇數(shù)據庫架構呢?
雖然把上面的架構全部組合在一起可以形成一個強大的高可用,高負載的數(shù)據庫系統(tǒng),但是架構選擇合適才是最重要的。
混合架構雖然能夠解決所有的場景的問題,但是也會面臨更多的挑戰(zhàn),你以為的完美架構,背后其實有著更多的坑。
1、對事務支持
分庫分表后(無論是垂直還是水平拆分亂高),就成了分布式事務了,如果依賴數(shù)據庫本身的分布式事務管理功能去執(zhí)行事務,將付出高昂的性能代價(XA事務);如果由應用程序去協(xié)助控制,形成程序邏輯上的事務,又會造成編程方面的負擔(TCC、SAGA)。
2、多庫結果并
(group by,order by)
由于數(shù)據分布于不同的數(shù)據庫中,無法直接對其做分頁、分組、排序等操作,一般應對這種多庫結果并的查詢業(yè)務都需要采用數(shù)據清洗、同步等其他手段處理(TIDB、KUDU等)。
3、數(shù)據延遲
主從架構下的多副本機制和水平分庫后的聚合庫都會存在主數(shù)據和副本數(shù)據之間的延遲問題。
4、跨庫join
分庫分表后表之間的關聯(lián)操作將受到限制,我們無法join位于不同分庫的表(垂直),也無法join分表粒度不同的表(水平), 結果原本一次查詢就能夠完成的業(yè)務,可能需要多次查詢才能完成。
5、分片擴容
水平分片之后,一旦需要做擴容時。需要將對應的數(shù)據做一次遷移,成本代價都極高的。
6、ID生成
分庫分表后由于數(shù)據庫獨立,原有的基于數(shù)據庫自增ID將無法再使用,這個時候需要采用其他外部的ID生成方案。
一、應用層依賴類(JDBC)
這類分庫分表中間件的特點就是和應用強耦合,需要應用顯示依賴相應的jar包(以Java為例),比如知名的TDDL、當當開源的
sharding-jdbc
、蘑菇街的TSharding等。
此類中間件的基本思路就是重新實現(xiàn)JDBC的API,通過重新實現(xiàn)
DataSource
、
PrepareStatement
等操作數(shù)據庫的接口,讓應用層在
基本
不改變業(yè)務代碼的情況下透明地實現(xiàn)分庫分表的能力。
中間件給上層應用提供熟悉的JDBC API,內部通過
sql解析
、
sql重寫
、
sql路由
等一系列的準備工作獲取真正可執(zhí)行的sql,然后底層再按照傳統(tǒng)的方法(比如數(shù)據庫連接池)獲取物理連接來執(zhí)行sql,最后把數(shù)據
結果合并
處理成ResultSet返回給應用層。
優(yōu)點
缺點
二、中間層代理類(Proxy)
這類分庫分表中間件的核心原理是在應用和數(shù)據庫的連接之間搭起一個
代理層
,上層應用以
標準的MySQL協(xié)議
來連接代理層,然后代理層負責
轉發(fā)請求
到底層的MySQL物理實例,這種方式對應用只有一個要求,就是只要用MySQL協(xié)議來通信即可。
所以用MySQL Navicat這種純的客戶端都可以直接連接你的分布式數(shù)據庫,自然也天然
支持所有的編程語言
。
在技術實現(xiàn)上除了和應用層依賴類中間件基本相似外,代理類的分庫分表產品必須實現(xiàn)標準的MySQL協(xié)議,某種意義上講數(shù)據庫代理層轉發(fā)的就是MySQL協(xié)議請求,就像Nginx轉發(fā)的是Http協(xié)議請求。
比較有代表性的產品有開創(chuàng)性質的Amoeba、阿里開源的Cobar、社區(qū)發(fā)展比較好的
Mycat
(基于Cobar開發(fā))等。
優(yōu)點
缺點
JDBC方案
:無中心化架構,兼容市面上大多數(shù)關系型數(shù)據庫,適用于開發(fā)高性能的輕量級 OLTP 應用(面向前臺)。
Proxy方案
:提供靜態(tài)入口以及異構語言的支持,適用于 OLAP 應用(面向后臺)以及對分片數(shù)據庫進行管理和運維的場景。
混合方案
:在大型復雜系統(tǒng)中存在面向C端用戶的前臺應用,也有面向企業(yè)分析的后臺應用,這個時候就可以采用混合模式。
JDBC 采用無中心化架構,適用于 Java 開發(fā)的高性能的輕量級 OLTP 應用;Proxy 提供靜態(tài)入口以及異構語言的支持,適用于 OLAP 應用以及對分片數(shù)據庫進行管理和運維的場景。
ShardingSphere是一套開源的分布式數(shù)據庫中間件解決方案組成的生態(tài)圈,它由
Sharding-JDBC
、
Sharding-Proxy
和
Sharding-Sidecar
(計劃中)這3款相互獨立的產品組成,他們均提供標準化的數(shù)據分片、分布式事務和數(shù)據庫治理功能,可適用于如Java同構、異構語言、容器、云原生等各種多樣化的應用場景。
ShardingSphere提供的核心功能:
Sharding-Proxy
定位為透明化的
數(shù)據庫代理端
,提供封裝了
數(shù)據庫二進制協(xié)議的服務端版本
,用于完成對
異構語言的支持
。
目前已提供MySQL版本,它可以使用
任何兼容MySQL協(xié)議的訪問客戶端
(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數(shù)據,對DBA更加友好。
向
應用程序完全透明
,可直接當做MySQL使用。
適用于任何兼容MySQL協(xié)議的客戶端。
Sharding-JDBC
定位為
輕量級Java框架
,在Java的JDBC層提供的額外服務。 它使用客戶端直連數(shù)據庫,以jar包形式提供服務,無需額外部署和依賴,可理解為
增強版的JDBC驅動,完全兼容JDBC和各種ORM框架
。
以電商SaaS系統(tǒng)為例,前臺應用采用Sharding-JDBC,根據業(yè)務場景的差異主要分為三種方案。
分庫(用戶)
問題解析:頭部企業(yè)日活高并發(fā)高,單獨分庫避免干擾其他企業(yè)用戶,用戶數(shù)據的增長緩慢可以不分表。
拆分維度:企業(yè)ID分庫
拆分策略:頭部企業(yè)單獨庫、非頭部企業(yè)一個庫
分庫分表(訂單)
問題解析:訂單數(shù)據增長速度較快,在分庫之余需要分表。
拆分維度:企業(yè)ID分庫、用戶ID分表
拆分策略:頭部企業(yè)單獨庫、非頭部企業(yè)一個庫,分庫之后用戶ID取模拆分表
單庫分表(附件)
問題解析:附件數(shù)據特點是并發(fā)量不大,只需要解決數(shù)據增長問題,所以單庫IO足以支撐的情況下分表即可。
拆分維度:用戶ID分表
拆分策略:用戶ID取模分表
問題一:分布式事務
分布式事務過于復雜也是分布式系統(tǒng)最難處理的問題,由于篇幅有限,后續(xù)會開篇專講這一塊內容。
問題二:分布式ID
問題三:跨片查詢
舉個例子,以用戶id分片之后,需要根據企業(yè)id查詢企業(yè)所有用戶信息。
sharding針對跨片查詢也是能夠支持的,本質上sharding的跨片查詢是采用同時查詢多個分片的數(shù)據,然后聚合結果返回,這個方式對資源耗費比較大,特別是對數(shù)據庫連接資源的消耗。
假設分4個數(shù)據庫,8個表,則sharding會同時發(fā)出32個SQL去查詢。一下子消耗掉了32個連接;
特別是針對單庫分表的情況要注意,假設單庫分64個表,則要消耗64個連接。如果我們部署了2個節(jié)點,這個時候兩個節(jié)點同時查詢的話,就會遇到數(shù)據庫連接數(shù)上限問題(mysql默認100連接數(shù))
問題四:分片擴容
隨著數(shù)據增長,每個片區(qū)的數(shù)據也會達到瓶頸,這個時候需要將原有的分片數(shù)量進行增加。由于增加了片區(qū),原先的hash規(guī)則也跟著變化,造成了需要將舊數(shù)據做遷移。
假設原先1個億的數(shù)據,hash分64個表,現(xiàn)在增長到50億的數(shù)據,需要擴容到128個表,一旦擴容就需要將這50億的數(shù)據做一次遷移,遷移成本是無法想象的。
問題五:一致性哈希
首先,求出每個
服務器的hash值
,將其配置到一個
0~2^n 的圓環(huán)上
(n通常取32)
其次,用同樣的方法求出待
存儲對象的主鍵 hash值
,也將其配置到這個圓環(huán)上。
然后,從數(shù)據映射到的位置開始順時針查找,將數(shù)據分布到找到的之一個服務器節(jié)點上。
一致性hash的優(yōu)點在于加入和刪除節(jié)點時只會影響到在哈希環(huán)中相鄰的節(jié)點,而對其他節(jié)點沒有影響。
所以使用一致性哈希在集群擴容過程中可以減少數(shù)據的遷移。
好了,這次分享到這里,我們日常的實踐可能只會用到其中一種方案,但它不是數(shù)據庫架構的全貌,打開技術視野,才能更好地把存儲工具利用起來。
老規(guī)矩,一鍵三連,日入兩千,點贊在看,年薪百萬!
本文作者:Jensen
7年Java老兵,小米主題設計師,手機輸入法設計師,ProcessOn特邀講師。
曾涉獵航空、電信、IoT、垂直電商產品研發(fā),現(xiàn)就職于某知名電商企業(yè)。
技術公眾號
【架構師修行錄】
號主,專注于分享日常架構、技術、職場干貨,Java Goals:架構師。
交個朋友,一起成長!
數(shù)據庫系統(tǒng)瓶頸的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于數(shù)據庫系統(tǒng)瓶頸,如何解決數(shù)據庫系統(tǒng)瓶頸問題?,50種方法巧妙優(yōu)化你的SQLServer數(shù)據庫(一),數(shù)據庫架構選型與落地,看這篇就夠了的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務器,香港云服務器,BGP云服務器,雙線云服務器,高防云服務器,成都云服務器,服務器托管。精選鉅惠,歡迎咨詢:028-86922220。
當前文章:如何解決數(shù)據庫系統(tǒng)瓶頸問題?(數(shù)據庫系統(tǒng)瓶頸)
分享地址:http://m.5511xx.com/article/dpggohi.html


咨詢
建站咨詢
