當前位置:首頁 » 操作系統 » 資料庫性能

資料庫性能

發布時間: 2022-02-08 11:37:38

① 影響資料庫性能的主要因素有哪些

以Mysql為例:

影響資料庫性能的主要因素總結如下:

1、sql查詢速度

2、網卡流量

3、伺服器硬體

4、磁碟IO

以上因素並不是時時刻刻都會影響資料庫性能,而就像木桶效應一樣。如果其中一個因素嚴重影響性能,那麼整個資料庫性能就會嚴重受阻。另外,這些影響因素都是相對的。

例如:當數據量並沒有達到百萬千萬這樣的級別,那麼sql查詢速度也許就不是個重要因素,換句話說,你的sql語句效率適當低下可能並不影響整個效率多少,反之,這種情況,無論如何怎麼優化sql語句,可能都沒有太明顯的效果。


相關內容拓展:

1、SQL查詢速度

風險:效率低下的SQL

2、網卡流量

風險:網卡IO被占滿(100Mb/8=100MB)

方案:

①減少從伺服器的數量。從伺服器都要從主伺服器上復制日誌,所以,從伺服器越多,網路流量越大。

②進行分級緩存。前方大量緩存突然失效會對資料庫造成嚴重的沖擊。

③避免使用「select * 」進行查詢

④分離業務網路和伺服器網路

3、磁碟IO

風險:磁碟IO性能突然下降。

方案:使用更好的磁碟設備解決。

② 哪些因素影響了資料庫性能

網路寬頻,磁碟IO,查詢速度都會影響到資料庫的性能。

具體問題具體分析,舉例來說明為什麼磁碟IO成瓶頸資料庫的性能急速下降了。

為什麼當磁碟IO成瓶頸之後, 資料庫的性能不是達到飽和的平衡狀態,而是急劇下降。為什麼資料庫的性能有非常明顯的分界點,原因是什麼?

相信大部分做資料庫運維的朋友,都遇到這種情況。 資料庫在前一天性能表現的相當穩定,資料庫的響應時間也很正常,但就在今天,在業務人員反饋業務流量沒有任何上升的情況下,資料庫的變得不穩定了,有時候一個最簡單的insert操作, 需要幾十秒,但99%的insert卻又可以在幾毫秒完成,這又是為什麼了?

dba此時心中有無限的疑惑,到底是什麼原因呢? 磁碟IO性能變差了?還是業務運維人員反饋的流量壓根就不對? 還是資料庫內部出問題?昨天不是還好好的嗎?

當資料庫出現響應時間不穩定的時候,我們在操作系統上會看到磁碟的利用率會比較高,如果觀察仔細一點,還可以看到,存在一些讀的IO. 資料庫伺服器如果存在大量的寫IO,性能一般都是正常跟穩定的,但只要存在少量的讀IO,則性能開始出現抖動,存在大量的讀IO時(排除配備非常高速磁碟的機器),對於在線交易的資料庫系統來說,大概性能就雪崩了。為什麼操作系統上看到的磁碟讀IO跟寫IO所帶來的性能差距這么大呢?

如果親之前沒有注意到上述的現象,親對上述的結論也是懷疑。但請看下面的分解。

在寫這個文章之前,作者閱讀了大量跟的IO相關的代碼,如非同步IO線程的相關的,innodb_buffer池相關的,以及跟讀數據塊最相關的核心函數buf_page_get_gen函數以及其調用的相關子函數。為了將文章寫得通俗點,看起來不那麼累,因此不再一行一行的將代碼解析寫出來。

咱們先來提問題。buf_page_get_gen函數的作用是從Buffer bool裡面讀數據頁,可能存在以下幾種情況。

提問. 數據頁不在buffer bool 裡面該怎麼辦?

回答:去讀文件,將文件中的數據頁載入到buffer pool裡面。下面是函數buffer_read_page的函數,作用是將物理數據頁載入到buffer pool, 圖片中顯示

buffer_read_page函數棧的頂層是pread64(),調用了操作系統的讀函數。


通過解析buf_wait_for_read函數的下層函數,我們知道其實通過首先自旋加鎖pin的方式,超過設定的自旋次數之後,進入等待,等待IO完成被喚醒。這樣節省不停自旋pin時消耗的cpu,但需要付出被喚起時的開銷。

再繼續擴展問題: 如果會話線程A 經過物理IO將數據頁1001讀入buffer之後,他需要修改這個頁,而在會話線程A之後的其他的同樣需要訪問數據頁1001的會話線程,即使在數據頁1001被入讀buffer pool之後,將仍然處於等待中。因為在數據頁上讀取或者更新的時候,同樣需要上鎖,這樣才能保證數據頁並發讀取/更新的一致性。

由此可見,當一個高並發的系統,出現了熱點數據頁需要從磁碟上載入到buffer pool中時,造成的延遲,是難以想像的。因此排在等待熱點頁隊列最後的會話線程最後才得到需要的頁,響應時間也就越長,這就是造成了一個簡單的sql需要執行幾十秒的原因。

再回頭來看上面的問題,mysql資料庫出現性能下降時,可以看到操作系統有讀IO。 原因是,在資料庫對數據頁的更改,是在內存中的,然後通過檢查點線程進行非同步寫盤,這個非同步的寫操作是不堵塞執行sql的會話線程的。所以,即使看到操作系統上有大量的寫IO,資料庫的性能也是很平穩的。但當用戶線程需要查找的數據頁不在buffer pool中時,則會從磁碟上讀取,在一個熱點數據頁不是非常多的情況下,我們設置足夠大的innodb_buffer_pool的size, 基本可以緩存所有的數據頁,因此一般都不會出現缺頁的情況,也就是在操作系統上基本看不到讀的IO。 當出現讀的IO時,原因時在執行buf_read_page_low函數,從磁碟上讀取數據頁到buffer pool, 則資料庫的性能則開始下降,當出現大量的讀IO,資料庫的性能會非常差。

③ 如何進行資料庫性能分析

使用RichAPM可以直接針對不同類型的資料庫性能進行分析,包括MySQL、Oracle、SQL Server三類關系型資料庫及Memcache、redis兩類非關系型資料庫。

④ 資料庫 性能問題

在沒有給id建索引的情況下:
2者都是全表掃描;掃描1萬行數據當然比100萬行快得多
Where這個關鍵字沒什麼原理
就是告訴分析器,下面是條件而已
優化(指建索引)跟Where的條件息息相關

⑤ 如何優化資料庫的性能

--資料庫性能調優
--1.聚集索引、主鍵
--2.盡量不要用臨時表
--3.多多使用事務
--4.表設計要規范
--5.不要使用游標
--6.避免死鎖
--7.不要打開大數據集
--8.最好不要select *
--9.不要使用text數據類型,用varchar
--10.不要給諸如「性別」列創建索引
--11.不要使用Insert插入大量的數據
--12.盡量用join代替where,因為where進行全表搜索

⑥ 優化資料庫性能的方式有哪些

優化SQL語句
存儲過程
給表建索引
減少一些不必要的查詢
比如:只要查詢demo表中的
name
欄位一般都會這樣寫
"select
*
from
demo"
這樣寫他是查詢的整張表如果有很多的欄位這樣差出來的效率是很低的
可以寫成這樣
"select
name
from
deom"

⑦ 衡量資料庫性能的重要指標

具體來說,本文包括以下內容:

  • 事務

  • 查詢性能

  • 用戶和查詢沖突

  • 容量

  • 配置

  • NoSQL 資料庫

  • 事務

    事務可以觀察真實用戶的行為:能夠在應用交互時捕獲實時性能。眾所周知,測量事務的性能包括獲取整個事務的響應時間和組成事務的各個部分的響應時間。通常我們可以用這些響應時間與滿足事務需求的基線對比,來確定當前事務是否處於正常狀態。

    如果你只想衡量應用的某個方面,那麼可以評估事務的行為。所以,盡管容器指標能夠提供更豐富的信息,並且幫助你決定何時對當前環境進行自動測量,但你的事務就足以確定應用性能。無需向應用程序伺服器獲取 CPU 的使用情況,你更應該關心用戶是否完成了事務,以及該事務是否得到了優化。

    補充一個小知識點,事務是由入口點決定的,通過該入口點可以啟動事務與應用進行交互。

    一旦定義了事務,會在整個應用生態系統中對其性能進行測量,並將每個事務與基線進行比對。例如,我們可能會決定當事務的響應時間與基線相比,一旦慢於平均響應時間的兩個標准差是否就應該判定為異常,如圖1所示。

  • 圖1-基於基線評估當前事務響應時間
  • 用於評估事務的基線與正在進行的事務活動在時間上是一致的,但事務會由每個事務執行來完善。例如,當你選定一個基線,在當前事務結束之後,將事務與平均響應時間按每天的小時數和每周的天數進行對比,所有在那段時間內執行的事務都將會被納入下周的基線中。通過這種機制,應用程序可以隨時間而變化,而無需每次都重建原始基線;你可以將其看作是一個隨時間移動的窗口。

    總之,事務最能反映用戶體驗的測量方法,所以也是衡量性能狀況最重要的指標。

    查詢性能
    最容易檢測到查詢性能是否正常的指標就是查詢本身。由查詢引起的問題可能會導致時間太長而無法識別所需數據或返回數據。所以不妨在查詢中排查以下問題。

    1. 選擇過多冗餘數據

    編寫查詢語句來返回適當的數據是遠遠不夠的,很可能你的查詢語句會返回太多列,從而導致選擇行和檢索數據變得異常緩慢。所以,最好是列出所需的列,而不是直接用 SELECT*。當需要在特定欄位中查詢時,該計劃可能會確定一個覆蓋索引從而加快結果返回。覆蓋索引通常會包含查詢中使用的所有欄位。這意味著資料庫可以僅從索引中產生結果,而不需要通過底層表來構建。

    另外,列出結果中所需的列不僅可以減少傳輸的數據,還能進一步提高性能。

    2. 表之間的低效聯接

    聯接會導致資料庫將多組數據帶到內存中進行比較,這會產生多個資料庫讀取和大量 CPU。根據表的索引,聯接還可能需要掃描兩個表的所有行。如果寫不好兩個大型表之間的聯接,就需要對每個表進行完整掃描,這樣的計算量將會非常大。其他會拖慢聯接的因素包括聯接列之間存在不同的數據類型、需要轉換或加入包含 LIKE 的條件,這樣就會阻止使用索引。另外,還需注意避免使用全外聯接;在恰當的時候使用內部聯接只返回所需數據。

    3. 索引過多或過少

    如果查詢優化沒有可用的索引時,資料庫會重新掃描表來產生查詢結果,這個過程會生成大量的磁碟輸入/輸出(I/O)。適當的索引可以減少排序結果的需要。雖然非唯一值的索引在生成結果時,不能像唯一索引那樣方便。如果鍵越大,索引也會變大,並通過它們創建更多的磁碟 I/O。大多數索引是為了提高數據檢索的性能,但也需要明白索引本身也會影響數據的插入和更新,因為所有相關聯的指標都必須更新。

    4. 太多的SQL導致爭用解析資源

    任何 SQL 查詢在執行之前都必須被解析,在生成執行計劃之前需要對語法和許可權進行檢查。由於解析非常耗時,資料庫會保存已解析的 SQL 來重復利用,從而減少解析的耗時。因為 WHERE 語句不同,所以使用文本值的查詢語句不能被共享。這將導致每個查詢都會被解析並添加到共享池中,由於池的空間有限,一些已保存的查詢會被舍棄。當這些查詢再次出現時,則需要重新解析。

    用戶和查詢沖突
    資料庫支持多用戶,但多用戶活動也可能造成沖突。

    1. 由慢查詢導致的頁/行鎖定

    為了確保查詢產生精確的結果,資料庫必須鎖定表以防止在運行讀取查詢時再發生其他的插入和更新行為。如果報告或查詢相當緩慢,需要修改值的用戶可能需要等待至更新完成。鎖提示能幫助資料庫使用最小破壞性的鎖。從事務資料庫中分離報表也是一種可靠的解決方法。

    2. 事務鎖和死鎖

    當兩個事務被阻塞時會出現死鎖,因為每一個都需要使用被另一個佔用的資源。當出現一個普通鎖時,事務會被阻塞直到資源被釋放。但卻沒有解決死鎖的方案。資料庫會監控死鎖並選擇終止其中一個事務,釋放資源並允許該事務繼續進行,而另一個事務則回滾。

    3. 批處理操作造成資源爭奪

    批處理過程通常會執行批量操作,如大量的數據載入或生成復雜的分析報告。這些操作是資源密集型的,但可能影響在線用戶的訪問應用的性能。針對此問題最好的解決辦法是確保批處理在系統使用率較低時運行,比如晚上,或用單獨的資料庫進行事務處理和分析報告。

    容量
    並不是所有的資料庫性能問題都是資料庫問題。有些問題也是硬體不合適造成的。

    1. CPU 不足或 CPU 速度太慢

    更多 CPU 可以分擔伺服器負載,進一步提高性能。資料庫的性能不僅是資料庫的原因,還受到伺服器上運行其他進程的影響。因此,對資料庫負載及使用進行審查也是必不可少的。由於 CPU 的利用率時時在變,在低使用率、平均使用率和峰值使用率的時間段分別檢查該指標可以更好地評估增加額外的 CPU 資源是否有益。

    2. IOPS 不足的慢磁碟

    磁碟性能通常以每秒輸入/輸出操作(IOPS)來計。結合 I/O 大小,該指標可以衡量每秒的磁碟吞吐量是多少兆。同時,吞吐量也受磁碟的延遲影響,比如需要多久才能完成請求,這些指標主要是針對磁碟存儲技術而言。傳統的硬碟驅動器(HDD)有一個旋轉磁碟,通常比固態硬碟(SSD)或快閃記憶體更慢。直到近期,SSD 雖然仍比 HDD 貴,但成本已經降了下來,所以在市場上也更具競爭力。

    3. 全部或錯誤配置的磁碟

    眾所周知,資料庫會被大量磁碟訪問,所以不正確配置的磁碟可能帶來嚴重的性能缺陷。磁碟應該適當分區,將系統數據目錄和用戶數據日誌分開。高度活躍的表應該區分以避免爭用,通過在不同磁碟上存放資料庫和索引增加並行放置,但不要將操作系統和資料庫交換空間放置在同一磁碟上。

    4. 內存不足

    有限或不恰當的物理內存分配會影響資料庫性能。通常我們認為可用的內存更多,性能就越好。監控分頁和交換,在多個非繁忙磁碟中建立多頁面空間,進一步確保分頁空間分配足夠滿足資料庫要求;每個資料庫供應商也可以在這個問題上提供指導。

    5. 網速慢

    網路速度會影響到如何快速檢索數據並返回給終端用戶或調用過程。使用寬頻連接到遠程資料庫。在某些情況下,選擇 TCP/IP 協議而不是命名管道可顯著提高資料庫性能。

    配置

    每個資料庫都需設置大量的配置項。通常情況下,默認值可能不足以滿足資料庫所需的性能。所以,檢查所有的參數設置,包括以下問題。

    1. 緩沖區緩存太小

    通過將數據存儲在內核內存,緩沖區緩存可以進一步提高性能同時減少磁碟 I/O。當緩存太小時,緩存中的數據會更頻繁地刷新。如果它再次被請求,就必須從磁碟重讀。除了磁碟讀取緩慢之外,還給 I/O 設備增添了負擔從而成為瓶頸。除了給緩沖區緩存分配足夠的空間,調優 SQL 查詢可以幫助其更有效地利用緩沖區緩存。

    2. 沒有查詢緩存

    查詢緩存會存儲資料庫查詢和結果集。當執行相同的查詢時,數據會在緩存中被迅速檢索,而不需要再次執行查詢。數據會更新失效結果,所以查詢緩存是唯一有效的靜態數據。但在某些情況下,查詢緩存卻可能成為性能瓶頸。比如當鎖定為更新時,巨大的緩存可能導致爭用沖突。

    3. 磁碟上臨時表創建導致的 I/O 爭用

    在執行特定的查詢操作時,資料庫需要創建臨時表,如執行一個 GROUP BY 子句。如果可能,在內存中創建臨時表。但是,在某些情況下,在內存中創建臨時表並不可行,比如當數據包含 BLOB 或 TEXT 對象時。在這些情況下,會在磁碟上創建臨時表。大量的磁碟 I / O 都需要創建臨時表、填充記錄、從表中選擇所需數據並在查詢完成後舍棄。為了避免影響性能,臨時資料庫應該從主資料庫中分離出來。重寫查詢還可以通過創建派生表來減少對臨時表的需求。使用派生表直接從另一個 SELECT 語句的結果中選擇,允許將數據加到內存中而不是當前磁碟上。

    NoSQL 資料庫

    NoSQL 的優勢在於它處理大數據的能力非常迅速。但是在實際使用中,也應該綜合參考 NoSQL 的缺點,從而決定是否適合你的用例場景。這就是為什麼NoSQL通常被理解為 「不僅僅是 SQL」,說明了 NoSQL 並不總是正確的解決方案,也沒必要完全取代 SQL,以下分別列舉出五大主要原因。

    1. 挑剔事務

    難以保持 NoSQL 條目的一致性。當訪問結構化數據時,它並不能完全確保同一時間對不同表的更改都生效。如果某個過程發生崩潰,表可能會不一致。一致事務的典型代表是復式記賬法。相應的信貸必須平衡每個借方,反之亦然。如果雙方數據不一致則不能輸入。NoSQL 則可能無法保證「收支平衡」。

    2. 復雜資料庫

    NoSQL 的支持者往往以高效代碼、簡單性和 NoSQL 的速度為傲。當資料庫任務很簡單時,所有這些因素都是優勢。但當資料庫變得復雜,NoSQL 會開始分解。此時,SQL 則比 NoSQL 更好地處理復雜需求,因為 SQL 已經成熟,有符合行業標準的介面。而每個 NoSQL 設置都有一個唯一的介面。

    3. 一致聯接

    當執行 SQL 的聯接時,由於系統必須從不同的表中提取數據進行鍵對齊,所以有一個巨大的開銷。而 NoSQL 似乎是一個空想,因為缺乏聯接功能。所有的數據都在同一個表的一個地方。當檢索數據時,它會同時提取所有的鍵值對。問題在於這會創建同一數據的多個副本。這些副本也必須更新,而這種情況下,NoSQL 沒有功能來確保更新。

    4. Schema設計的靈活性

    由於 NoSQL 不需要 schema,所以在某些情況下也是獨一無二的。在以前的資料庫模型中,程序員必須考慮所有需要的列能夠擴展,能夠適應每行的數據條目。在 NoSQL 下,條目可以有多種字元串或者完全沒有。這種靈活性允許程序員迅速增加數據。但是,也可能存在問題,比如當有多個團體在同一項目上工作時,或者新的開發團隊接手一個項目時。開發人員能夠自由地修改資料庫,也可能會不斷實現各種各樣的密鑰對。

    5. 資源密集型

    NoSQL 資料庫通常比關系資料庫更加資源密集。他們需要更多的 CPU 儲備和 RAM 分配。出於這個原因,大多數共享主機公司都不提供 NoSQL。你必須注冊一個 VPS 或運行自己的專用伺服器。另一方面,SQL 主要是在伺服器上運行。初期的工作都很順利,但隨著資料庫需求的增加,硬體必須擴大。單個大型伺服器比多個小型伺服器昂貴得多,價格呈指數增長。所以在這種企業計算場景下,使用 NoSQL 更為劃算,例如那些由谷歌和 Facebook 使用的伺服器。

⑧ 資料庫的性能方面的東西

1.應該是根據所建立信息系統客戶的人數、預算的總數據量、平均訪問量選擇資料庫。
2.性能指標就比較多了,你可以考慮一下資料庫的可移植性(適用於不同的操作系統平台),資料庫的並發性(同時操作一條數據或者一張表時數據的鎖定方式),還有就是資料庫的恢復能力(在出現異常數據能夠最快完成恢復及備份的時間)。 --還有安全性,這個也很重要

300個人左右的b/s系統我推薦db2,並發性比sqlserver高,你要用常用的話甲骨文也可以,一般c/s系統都用sqlserver(中),access、mysql(小)

如果要說特點,真的是太多了,10000個字都不夠寫,你如果要買他們的產品,可以上網站或者找售前幫你

價格的話:sqlserver正版的大概就是10來萬,db2要買服務,基本一年是15萬到20萬(基本服務),面向的應用我上面說了,b/s系統適合db2和甲骨文

這個性能是無法度量的,還要看你應用的情況,db2的應用最大的數據量理論上可以上億,只要你資料庫設計得合理,軟體可以不要錢,基本服務一年是15到20萬,不包括數據倉庫,軟體就是靠的增值服務,但是你不買服務就沒有技術支持,而且商用的話你也有風險

如果你非要把其他搜到的東西列在這里,什麼具體性能指標也沒什麼意義,還不如看ibm的db2白皮書,以我的經驗來看,你應用在300個人在500個人的在線量,百萬條數據,同時訪問資料庫,用db2不存在什麼大的負載,非要說什麼特點的話,就是一個字貴,db2的硬體的要求比較高,最好能上存儲.

sqlserver存在一些安全性問題,而且大多數都運行在windows平台,對安全性的要求都不一樣,你去了解一下aix就知道了

⑨ 資料庫性能優化主要包括哪些方面

包括網路、硬體、操作系統、資料庫參數和應用程序。

資料庫的優化通常可以通過對網路、硬體、操作系統、資料庫參數和應用程序的優化來進行。最常見的優化手段就是對硬體的升級。

根據統計,對網路、硬體、操作系統、資料庫參數進行優化所獲得的性能提升,全部加起來只佔資料庫系統性能提升的40%左右,其餘的60%系統性能提升來自對應用程序的優化。許多優化專家認為,對應用程序的優化可以得到80%的系統性能的提升。

(9)資料庫性能擴展閱讀

資料庫性能優化法則歸納為5個層次:

1、減少數據訪問(減少磁碟訪問)

2、返回更少數據(減少網路傳輸或磁碟訪問)

3、減少交互次數(減少網路傳輸)

4、減少伺服器CPU開銷(減少CPU及內存開銷)

5、利用更多資源(增加資源)

由於每一層優化法則都是解決其對應硬體的性能問題,所以帶來的性能提升比例也不一樣。傳統資料庫系統設計是也是盡可能對低速設備提供優化方法,因此針對低速設備問題的可優化手段也更多,優化成本也更低。

任何一個SQL的性能優化都應該按這個規則由上到下來診斷問題並提出解決方案,而不應該首先想到的是增加資源解決問題。

⑩ 資料庫的性能是由什麼來衡量

資料庫檢索的速度

熱點內容
單片機android 發布:2024-09-20 09:07:24 瀏覽:760
如何提高三星a7安卓版本 發布:2024-09-20 08:42:35 瀏覽:660
如何更換伺服器網站 發布:2024-09-20 08:42:34 瀏覽:307
子彈演算法 發布:2024-09-20 08:41:55 瀏覽:284
手機版網易我的世界伺服器推薦 發布:2024-09-20 08:41:52 瀏覽:813
安卓x7怎麼邊打游戲邊看視頻 發布:2024-09-20 08:41:52 瀏覽:158
sql資料庫安全 發布:2024-09-20 08:31:32 瀏覽:90
蘋果連接id伺服器出錯是怎麼回事 發布:2024-09-20 08:01:07 瀏覽:503
編程鍵是什麼 發布:2024-09-20 07:52:47 瀏覽:655
學考密碼重置要求的證件是什麼 發布:2024-09-20 07:19:46 瀏覽:479