資料庫優化的方法及步驟

2021-08-23 12:24:06 字數 2344 閱讀 7060

先簡單介紹下博主 面臨的情況,17年底,乙個用了5年的售後系統處於要公升級換代又因為其他原因導致暫時不能公升級的情況,所以需要在不動大的架構的情況來做優化。具體有個呼叫中心,坐席會一直在接**,60人左右,**儲存時有個很複雜的派單邏輯,要優先保證效率。外面管理員,維修工,操作員3000+。

先用**整理下,看看各個表都是多大

--script1:

--檢視某資料庫所有表的資訊

declare @tablespaceinfo table (

[name] sysname,

[rows] bigint,

[reserved] varchar(100),

[data] varchar(100),

[index_size] varchar(100),

[unused] varchar(100)

)declare @tablename varchar(255);

declare info_cursor cursor for

select '['+[name]+']' from sys.tables where type='u';

open info_cursor

fetch next from info_cursor into @tablename

while @@fetch_status = 0

begin

insert into @tablespaceinfo exec sp_spaceused @tablename

fetch next from info_cursor into @tablename

endclose info_cursor

deallocate info_cursor

select * from @tablespaceinfo

order by cast(replace(reserved,'kb','') as int) desc

複製下來直接執行就好,結果是資料庫大致400g,最大的表為客戶檔案和客戶資產,分別有2000萬條和1800萬條資料這兩個資料表,之前優化後已經對錶做了分割槽,具體可以看表分割槽,下面是要先對呼叫中心反映的卡頓做對應的處理,說是**接入後要10-20秒才會有反應,需要出畫面開啟慢的原因。

開始以為是兩個大表的原因,後面發現不是,下面介紹下最快速發現問題的工具。

框框中標識的是活動監視器,裡面會有幾個非常有用的東西,我們繼續暫開說

活動監視器會自動給出這些監視的內容,這裡有兩點非常需要關注,最近耗費大量資源的查詢,以及程序。雙擊這些查詢最近耗費大量資源的查詢,會看到具體的語句。我們這時只要在其中發現我們需要優化的介面中存在的語句呼叫的內容,就可以做對應處理。同時插一句,如果讓這裡耗費大量資源語句的都得到優化就已經極大的完成了任務了。

這個是我找出來的問題的儲存過程,發現這個執行起來非常慢大概需要15秒,雖然看著表很多,但總覺得不至於。圖中可以發現,有大量的dateadd(mm,-6,getdate())為了獲取最近6個月的服務資料,那就簡單了,建立個變數代替這個就行。現在這個儲存過程被壓縮到2秒,另外說一句,就算不用運算getdate這個函式,取一次,然後用變數代替getdate也會比現在優化很多,不需要反覆去資料庫取時間。

下面是程序

在最下方還有個select  count (*) from的語句,可能這是學校裡教法,但實際應用中把count(*)換成count(1)在改語句中竟然可以提公升60%的效率,親測有效。

最後帶一下概述

這裡的計數器是反應伺服器效能的,如果其他方面沒用,只能通過提公升硬體了。挑選伺服器已經在前面提過。

在這問題優化過後,資料庫還經歷了很多事務方面的優化,打算在後面單獨講,包括髒讀幻讀需要的注意點,效能和準確性的兼顧,這些都是需要統籌考慮的。活動監視器這個sql的神器,希望可以得到更改的應用,幫到大家,一般小問題都可以比較簡單的從這裡面發現

經過1個月的優化,這套服務了5年的系統終於繼續愉快的跑了起來。對於乙個服務了這麼多年系統,真不容易哦。

優化mysql資料庫的幾個步驟

分析問題的幾個步驟 1.開啟慢查詢日誌。這個步驟就是為了記錄慢查詢的sql,為下個步驟做準備,此步驟相關的知識點有如下 1.show variables like slow query log 檢視慢查詢的日誌記錄是否開啟。2.set global slow query log 1 設定慢查詢開啟。...

python 連線資料庫的步驟以及優化方法

python 連線資料庫的步驟以及優化方法 一.使用的模組是pymysql import pymysql conn pymysql.connect host 127.0.0.1 port 3306,user root password 123 db db1 charset utf8 獲取游標 cur...

資料庫優化的方法

常見的資料庫優化方法 索引 資料庫 快取,分表,分庫,sql優化。索引 建立索引一般有以下兩個目的 維護被索引列的唯一性和提供快速訪問表中資料的策略。95 的資料庫能問題都可以採用索引技術得到解決。索引有助於提高檢索效能,但過多或不當的索引也會導致系統低效。因為使用者在表中每加進乙個索引,資料庫就要...