當前位置:首頁 » 數據倉庫 » 資料庫性能測試實例
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫性能測試實例

發布時間: 2023-07-06 07:46:49

『壹』 資料庫中視圖怎麼進行軟體測試

從測試過程的角度來說我們也可以把資料庫測試分為:

系統測試

傳統軟體系統測試的測試重點是需求覆蓋,而對於我們的資料庫測試同樣也需要對需求覆蓋進行保證。那麼資料庫在初期設計中也需要對這個進行分析,測試。例如存儲過程,視圖,觸發器,約束,規則等我們都需要進行需求的驗證確保這些功能設計是符合需求的.另一方面我們需要確認資料庫設計文檔和最終的資料庫相同,當設計文檔變化時我們同樣要驗證改修改是否落實到資料庫上。

這個階段我們的測試主要通過資料庫設計評審來實現。

集成測試

集成測試是主要針對介面進行的測試工作,從資料庫的角度來說和普通測試稍微有些區別對於資料庫測試來說,需要考慮的是數據項的修改操作、數據項的增加操作、數據項的刪除操作、數據表增加滿、數據表刪除空、刪除空表中的記錄、數據表的並發操作、針對存儲過程的介面測試、結合業務邏輯做關聯表的介面測試。

同樣我們需要對這些介面考慮採用等價類、邊界值、錯誤猜測等方法進行測試。

單元測試

單元測試側重於邏輯覆蓋,相對對於復雜的代碼來說,資料庫開發的單元測試相對簡單些,可以通過語句覆蓋和走讀的方式完成。

系統測試相對來說比較困難,這要求有很高的資料庫設計能力和豐富的資料庫測試經驗。而集成測試和單元測試就相對簡單了。

而我們也可以從測試關注點的角度對資料庫進行分類:

功能測試

對資料庫功能的測試我們可以依賴與工具進行:

DBunit:一款開源的資料庫功能測試框架,可以使用類似與Junit的方式對資料庫的基本操作進行白盒的單元測試,對輸入輸出進行校驗。

QTP:大名鼎鼎的自動測試工具,通過對對象的捕捉識別,我們可以通過QTP來模擬用戶的操作流程,通過其中的校驗方法或者結合資料庫後台的監控對整個資料庫中的數據進行測試。個人覺得比較偏向灰盒。

DataFactory:一款優秀的資料庫數據自動生成工具,通過它你可以輕松的生成任意結構資料庫,對資料庫進行填充,幫助你生成所需要的大量數據從而驗證我們資料庫中的功能是否正確。這是屬於黑盒測試。

資料庫性能雖然我們的硬體最近幾年進步很快,但是我們需要處理的數據以更快的速度在增加。幾億條記錄的表格在現在是司空見慣的,如此龐大的數據量在大量並發連接操作時,我們不能像以前一樣隨意的使用查詢,連接查詢,嵌套查詢,視圖,這些操作如果不當會給系統帶來非常巨大的壓力,嚴重影響系統性能。

性能優化分4部分:

1、物理存儲方面

2、邏輯設計方面

3、資料庫的參數調整

4、sql語句優化

性能測試:

我們如何對性能方面進行測試呢,業界也提供了很多工具通過資料庫系統的SQL語句分析工具,我們可以分析得到資料庫語句執行的瓶頸,從而優化SQL語句。

Loadrunner:這個不用多說,我們可以通過對協議的編程來對資料庫做壓力測試。

Swingbench:(這是一個重量級別的feature,類似LR,而且非常強大,只不過專門針對oracle而已)資料庫廠商也意識到這點,例如oracle11g已經提供了real applicationtest,提供資料庫性能測試,分析系統的應用瓶頸。

還有很多第三方公司開發了SQL語句優化工具來幫助你自動的進行語句優化工作從而提高執行效率。

安全測試:

軟體日益復雜,而數據又成為了系統中重中之重的核心,從以往對系統的破壞現在更傾向於對數據的獲取和破壞。而資料庫的安全被提到了最前端自從SQL 注入攻擊被發現,冒失萬無一失的資料庫一下從後台變為了前台,而一旦資料庫被攻破,整個系統也會暴露在黑客的手下,通過資料庫強大的存儲過程,黑客可以輕松的獲得整個系統的許可權。而SQL的注入看似簡單缺很難防範,對於安全測試來說,如何防範系統被注入是測試的難點。

業界也有相關的資料庫注入檢測工具,來幫助用戶對自身系統進行安全檢測。

對於這點來說業界也有標准,例如ISO IEC 21827,也叫做SSE CMM 3.0,是CMM和ISO的集成的產物,專門針對系統安全領域的另外一方面,資料庫的健壯性,容錯性和恢復能力也是我們測試的要點

我們也可以發現功能測試,性能測試,安全測試,是一個由簡到繁的過程,也是資料庫測試人員需要逐步掌握的技能,這也是以後公司對資料庫測試人員的要求。

『貳』 測試sql語句性能

有時候我們經常為我們的sql語句執行效率低下發愁 反復優化後 可還是得不到提高

那麼你就用這條語句找出你sql到底是在哪裡慢了

示例

SET STATISTICS io ON SET STATISTICS time ON go 你要測試的sql語句 select top * from TBL_Cot_RecStaticList go SET STATISTICS profile OFF SET STATISTICS io OFF SET STATISTICS time OFF

顯示信息

SQL Server 分析和編譯時間: CPU 時間讓判 = 毫秒 佔用時間 = 毫秒

( 行受坦亂改影響) 表 TBL_Cot_RecStaticList 掃描計數 邏輯讀取 次 物理讀取 次 預讀 次 lob 邏輯陪告讀取 次 lob 物理讀取 次 lob 預讀 次

SQL Server 執行時間: CPU 時間 = 毫秒 佔用時間 = 毫秒 SQL Server 分析和編譯時間: CPU 時間 = 毫秒 佔用時間 = 毫秒

SQL Server 執行時間: CPU 時間 = 毫秒 佔用時間 = 毫秒

lishixin/Article/program/net/201311/12652

『叄』 mysql資料庫性能測試

我理解的是你希望了解mysql性能測試的方法:
其實常用的一般:
選取最適用的欄位屬性
MySQL可以很好的支持大數據量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在創建表的時候,為了獲得更好的性能,我們可以將表中欄位的寬度設得盡可能小。例如,在定義郵政編碼這個欄位時,如果將其設置為CHAR(255),顯然給資料庫增加了不必要的空間,甚至使用VARCHAR這種類型也是多餘的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不是BIGIN來定義整型欄位。

另外一個提高效率的方法是在可能的情況下,應該盡量把欄位設置為NOT NULL,這樣在將來執行查詢的時候,資料庫不用去比較NULL值。

對於某些文本欄位,例如「省份」或者「性別」,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當作數值型數據來處理,而數值型數據被處理起來的速度要比文本類型快得多。這樣,我們又可以提高資料庫的性能。

2、使用連接(JOIN)來代替子查詢(Sub-Queries)

MySQL從4.1開始支持SQL的子查詢。這個技術可以使用SELECT語句來創建一個單列的查詢結果,然後把這個結果作為過濾條件用在另一個查詢中。例如,我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發出訂單的客戶ID取出來,然後將結果傳遞給主查詢,如下所示:

DELETE FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連接(JOIN).. 替代。例如,假設我們要將所有沒有訂單記錄的用戶取出來,可以用下面這個查詢完成:

SELECT * FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

如果使用連接(JOIN).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對CustomerID建有索引的話,性能將會更好,查詢如下:

SELECT * FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo. CustomerID WHERE salesinfo.CustomerID IS NULL

連接(JOIN).. 之所以更有效率一些,是因為 MySQL不需要在內存中創建臨時表來完成這個邏輯上的需要兩個步驟的查詢工作。

3、使用聯合(UNION)來代替手動創建的臨時表

MySQL 從 4.0 的版本開始支持 UNION 查詢,它可以把需要使用臨時表的兩條或更多的 SELECT 查詢合並的一個查詢中。在客戶端的查詢會話結束的時候,臨時表會被自動刪除,從而保證資料庫整齊、高效。使用 UNION 來創建查詢的時候,我們只需要用 UNION作為關鍵字把多個 SELECT 語句連接起來就可以了,要注意的是所有 SELECT 語句中的欄位數目要想同。下面的例子就演示了一個使用 UNION的查詢。

SELECT Name, Phone FROM client UNION SELECT Name, BirthDate FROM author
UNION
SELECT Name, Supplier FROM proct

4、事務

盡管我們可以使用子查詢(Sub-Queries)、連接(JOIN)和聯合(UNION)來創建各種各樣的查詢,但不是所有的資料庫操作都可以只用一條或少數幾條SQL語句就可以完成的。更多的時候是需要用到一系列的語句來完成某種工作。但是在這種情況下,當這個語句塊中的某一條語句運行出錯的時候,整個語句塊的操作就會變得不確定起來。設想一下,要把某個數據同時插入兩個相關聯的表中,可能會出現這樣的情況:第一個表中成功更新後,資料庫突然出現意外狀況,造成第二個表中的操作沒有完成,這樣,就會造成數據的不完整,甚至會破壞資料庫中的數據。要避免這種情況,就應該使用事務,它的作用是:要麼語句塊中每條語句都操作成功,要麼都失敗。換句話說,就是可以保持資料庫中數據的一致性和完整性。事物以BEGIN 關鍵字開始,COMMIT關鍵字結束。在這之間的一條SQL操作失敗,那麼,ROLLBACK命令就可以把資料庫恢復到BEGIN開始之前的狀態。

BEGIN;

INSERT INTO salesinfo SET CustomerID=14;

UPDATE inventory SET Quantity=11

WHERE item='book';

COMMIT;

事務的另一個重要作用是當多個用戶同時使用相同的數據源時,它可以利用鎖定資料庫的方法來為用戶提供一種安全的訪問方式,這樣可以保證用戶的操作不被其它的用戶所干擾。

5、鎖定表

盡管事務是維護資料庫完整性的一個非常好的方法,但卻因為它的獨占性,有時會影響資料庫的性能,尤其是在很大的應用系統中。由於在事務執行的過程中,資料庫將會被鎖定,因此其它的用戶請求只能暫時等待直到該事務結束。如果一個資料庫系統只有少數幾個用戶

來使用,事務造成的影響不會成為一個太大的問題;但假設有成千上萬的用戶同時訪問一個資料庫系統,例如訪問一個電子商務網站,就會產生比較嚴重的響應延遲。

其實,有些情況下我們可以通過鎖定表的方法來獲得更好的性能。下面的例子就用鎖定表的方法來完成前面一個例子中事務的功能。

LOCK TABLE inventory WRITE
SELECT Quantity FROM inventory
WHEREItem='book';
...

UPDATE inventory SET Quantity=11
WHEREItem='book';
UNLOCK TABLES

這里,我們用一個 SELECT 語句取出初始數據,通過一些計算,用 UPDATE 語句將新值更新到表中。包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作。

6、使用外鍵

鎖定表的方法可以維護數據的完整性,但是它卻不能保證數據的關聯性。這個時候我們就可以使用外鍵。例如,外鍵可以保證每一條銷售記錄都指向某一個存在的客戶。在這里,外鍵可以把customerinfo 表中的CustomerID映射到salesinfo表中CustomerID,任何一條沒有合法CustomerID的記錄都不會被更新或插入到salesinfo中。

CREATE TABLE customerinfo
(
CustomerID INT NOT NULL ,
PRIMARY KEY ( CustomerID )
) TYPE = INNODB;
CREATE TABLE salesinfo
(
SalesID INT NOT NULL,
CustomerID INT NOT NULL,
PRIMARY KEY(CustomerID, SalesID),
FOREIGN KEY (CustomerID) REFERENCES customerinfo
(CustomerID) ON DELETECASCADE
) TYPE = INNODB;

注意例子中的參數「ON DELETE CASCADE」。該參數保證當 customerinfo 表中的一條客戶記錄被刪除的時候,salesinfo 表中所有與該客戶相關的記錄也會被自動刪除。如果要在 MySQL 中使用外鍵,一定要記住在創建表的時候將表的類型定義為事務安全表 InnoDB類型。該類型不是 MySQL 表的默認類型。定義的方法是在 CREATE TABLE 語句中加上 TYPE=INNODB。如例中所示。

7、使用索引

索引是提高資料庫性能的常用方法,它可以令資料庫伺服器以比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有MAX(), MIN()和ORDERBY這些命令的時候,性能提高更為明顯。那該對哪些欄位建立索引呢?一般說來,索引應建立在那些將用於JOIN, WHERE判斷和ORDER BY排序的欄位上。盡量不要對資料庫中某個含有大量重復的值的欄位建立索引。對於一個ENUM類型的欄位來說,出現大量重復值是很有可能的情況,例如customerinfo中的「province」.. 欄位,在這樣的欄位上建立索引將不會有什麼幫助;相反,還有可能降低資料庫的性能。我們在創建表的時候可以同時創建合適的索引,也可以使用ALTER TABLE或CREATE INDEX在以後創建索引。此外,MySQL

從版本3.23.23開始支持全文索引和搜索。全文索引在MySQL 中是一個FULLTEXT類型索引,但僅能用於MyISAM 類型的表。對於一個大的資料庫,將數據裝載到一個沒有FULLTEXT索引的表中,然後再使用ALTER TABLE或CREATE INDEX創建索引,將是非常快的。但如果將數據裝載到一個已經有FULLTEXT索引的表中,執行過程將會非常慢。

8、優化的查詢語句

絕大多數情況下,使用索引可以提高查詢的速度,但如果SQL語句使用不恰當的話,索引將無法發揮它應有的作用。下面是應該注意的幾個方面。首先,最好是在相同類型的欄位間進行比較的操作。在MySQL 3.23版之前,這甚至是一個必須的條件。例如不能將一個建有索引的INT欄位和BIGINT欄位進行比較;但是作為特殊的情況,在CHAR類型的欄位和VARCHAR類型欄位的欄位大小相同的時候,可以將它們進行比較。其次,在建有索引的欄位上盡量不要使用函數進行操作。

例如,在一個DATE類型的欄位上使用YEAE()函數時,將會使索引不能發揮應有的作用。所以,下面的兩個查詢雖然返回的結果一樣,但後者要比前者快得多。

SELECT * FROM order WHERE YEAR(OrderDate)<2001;
SELECT * FROM order WHERE OrderDate<"2001-01-01";

同樣的情形也會發生在對數值型欄位進行計算的時候:

SELECT * FROM inventory WHERE Amount/7<24;
SELECT * FROM inventory WHERE Amount<24*7;

上面的兩個查詢也是返回相同的結果,但後面的查詢將比前面的一個快很多。第三,在搜索字元型欄位時,我們有時會使用 LIKE 關鍵字和通配符,這種做法雖然簡單,但卻也是以犧牲系統性能為代價的。例如下面的查詢將會比較表中的每一條記錄。

SELECT * FROM books
WHERE name like "MySQL%"

但是如果換用下面的查詢,返回的結果一樣,但速度就要快上很多:

SELECT * FROM books
WHERE name>="MySQL"and name<"MySQM"

最後,應該注意避免在查詢中讓MySQL進行自動類型轉換,因為轉換過程也會使索引變得不起作用。

『肆』 軟體開發資料庫如何進行測試

比如:數據冗餘,功能和性能方面存在的問題已經嚴重影響應用軟體的使用。軟體測試人員往往重視對軟體功能和編碼的測試,而忽略對軟體性能,特別是資料庫訪問並發測試。因為,他們固有的思想中認為資料庫設計存在問題對系統性能影響不大,或從根本上忽略了資料庫在軟體開發中的地位,直到出現了問題,才想到對資料庫的測試,但往往也是僅僅通過對編碼的測試工作中捎帶對資料庫進行一定的測試,這遠遠是不夠的。目前,中鐵網上訂票系統在大用戶同時在線訂票中系統頻頻癱瘓,就是最好的佐證。 所以,在應用軟體的測試工作中,應該將資料庫作為一個獨立的部分進行充分的測試,這樣才可以得到應用軟體所需要的性能優化的資料庫。那麼,應該對哪些內容進行測試,如何進行測試呢? 2、資料庫設計的測試 資料庫是應用的基礎,其性能直接影響應用軟體的性能。為了使資料庫具有較好的性能,需要對資料庫中的表進行規范化設計。規范化的範式可分為第一範式、第二範式、第三範式、BCNF範式、第四範式和第五範式。一般來說,邏輯資料庫設計應滿足第三範式的要求,這是因為滿足第三範式的表結構容易維護,且基本滿足實際應用的要求。因此,實際應用中一般都按照第三範式的標准進行規范化。但是,規范化也有缺點:由於將一個表拆分成為多個表,在查詢時需要多表連接,降低了查詢速度。故資料庫設計的測試包括前期需求分析產生資料庫邏輯模型和後期業務系統開發中的測試兩部分(這里指的是後者),我在這里稱為實體測試。 資料庫是由若乾的實體組成的,包括(表,視圖,存儲過程等),資料庫最基本的測試就是實體測試,通過對這些實體的測試,可以發現資料庫實體設計得是否充分,是否有遺漏,每個實體的內容是否全面,擴展性如何。 實體測試,可以用來發現應用軟體在功能上存在的不足,也可以發現數據冗餘的問題。經過測試,測試人員對有異議的問題要及時和資料庫的設計人員進行溝通解決。 3、數據一致性測試 在進行實體測試後,應進一步檢查下面的內容以保障數據的一致性: 3.1 表的主鍵測試根據應用系統的實際需求,對每個表的主鍵進行測試,驗證是否存在記錄不唯一的情況,如果有,則要重新設置主鍵,使表中記錄唯一。 3.2 表之間主外鍵關系的測試資料庫中主外鍵欄位在名稱,數據類型,欄位長度上的一致性測試。 3.3 級聯表,刪除主表數據後,相應從報表數據應同時刪除的問題例如學生表和學生成績表,學生數據已經刪除,成績表中相應學生的成績記錄應同時刪除。 3.4 存儲過程和觸發器的測試存儲過程可以人工執行,但觸發器不能人工處理,所以在對存儲過程和觸發器執行的過程中針對SQL SERVER2005及以上版本可以使用Microsoft SQL Server Profiler性能測試工具進行測試。 Microsoft SQL Server Profiler 是 SQL 跟蹤的圖形用戶界面,用於監視資料庫引擎或 Analysis Services 的實例。測試人員可以捕獲有關每個事件的數據並將其保存到文件或表中供以後分析。例如:可以對生產環境進行監視,了解哪些存儲過程由於執行速度太慢影響了性能。 4、資料庫的容量測試 隨著資料庫系統的使用,數據量在飛速增長,如何在使用前對數據容量的增長情況進行初步估算,為最終用戶提供參考,這在資料庫使用和維護過程中,是非常重要的。可以通過對資料庫設計中基本表的數據大小,和每天數據表的數據產生量進行初步估算。 記錄數據量=各個欄位所佔位元組數的總和表的數據量=記錄數據量*記錄數資料庫大小=各表數據量的總和 當然,資料庫的大小不僅僅只是基本表的大小,還有系統表,視圖,存儲過程等其它實體所佔的容量,但最基本的數據是表的數據。另外,資料庫的容量還包括資料庫日誌文件的容量,一般應預留資料庫文件的2倍左右。 5、資料庫的性能測試 應用軟體除了功能外,很重要的一部分就是軟體的性能,而對於資料庫系統,資料庫性能的好壞會直接影響應用軟體的性能,這部分的測試,一般手工測試就顯得無能為力了,這時就要藉助自動化的測試軟體,例如:DataFactory,DataFactory是一種強大的數據產生器,它允許開發人員和測試人員很容易產生百萬行有意義的正確的測試資料庫,該工具支持DB2、Oracle、Sybase、SQL Server資料庫。這樣,就可以模擬出應用軟體長期使用後,海量數據存儲的資料庫的性能狀況。從而盡早發現問題,進行資料庫性能的優化。 這里要注意,進行性能測試的時候,一定要注意測試環境的一致性,包括:操作系統、應用軟體的版本以及硬體的配置等,而且在進行資料庫方面的測試的時候一定要注意資料庫的記錄數、配置等要一致,只有在相同條件下進行測試,才可以對結果進行比較。否則無法和用戶對軟體的性能的觀點達成一致。 6、資料庫的壓力測試 說起測試,我們首先想到的就是軟體正確性的測試,即常說的功能測試。軟體功能正確僅是軟體質量合格指標之一。在實際開發中,還有其它的非功能因素也起著決定性的因素,例如軟體的響應速度。影響軟體響應速度的因素有很多,有些是因為演算法不夠高效;還有些可能受用戶並發數的影響。 在眾多類型的軟體測試中,壓力測試正是以軟體響應速度為測試目標,尤其是針對在較短時間內大量並發用戶的訪問時,軟體的抗壓能力。但壓力測試往往是手工難以測試的,必須藉助自動化測試工具。常用的壓力測試有:Web測試、資料庫測試等。 資料庫在大多數軟體項目中是不可缺少的,對於它進行壓力測試是為了找出資料庫對象是否可以有效地承受來自多個用戶的並發訪問。這些對象主要是:索引、觸發器、存儲過程和鎖。通過對SQL語句和存儲過程的測試,自動化的壓力測試工具可以間接的反應資料庫對象是否需要優化。 這些自動化的測試工具很多,各有特點,基於Java的項目可以使用JMeter,.Net項目可以採用.Net集成開發環境中提供的測試方案。 7、結束語 總之,在應用系統的測試中,把資料庫應當作為獨立的系統來測試,這無疑會為應用軟體的質量增加可靠的保障,同時還必須結合應用軟體進行集成測試,只有二者有機結合起來,才能最大限度的發揮資料庫和應用軟體的功能。

『伍』 如何評估和測試Mysql及oracle資料庫性能

1:伺服器環境

操作系統:Red Hat Enterprise Linux Server release 5.5 (Tikanga)

CPU:Intel(R) Xeon(R) CPU E5607 @ 2.27GHz 8核

內存:16G

Mysql:Ver 14.14 Distrib 5.5.21, for Linux (x86_64)

Oracle:OracleDatabase 11g Enterprise Edition Release

詳細數據測試(操作通過存儲過程完成)

數據插入

50並發Mysql插入性能圖示(橫坐標:當前數據總量,縱坐標:每秒執行次數){平均值:4841.98}

『陸』 資料庫系統優化的LECCO SQL Expert自動優化實例

假設我們從源代碼中抽取出這條SQL語句(也可以通過內帶的掃描器或監視器獲得SQL語句):
SELECT COUNT(*)
FROM EMPLOYEE
swheresEXISTS (SELECT 'X'
FROM DEPARTMENT
swheresEMP_DEPT=DPT_ID
AND DPT_NAME LIKE 'AC%')
AND EMP_ID IN (SELECT SAL_EMP_ID
FROM EMP_SAL_HIST B
swheresSAL_SALARY > 70000)
按下「優化」按鈕後,經過10幾秒,SQL Expert就完成了優化的過程,並在這10幾秒的時間里重寫產生了2267 條等價的SQL語句,其中136條SQL語句有不同的執行計劃。
接下來,我們可以對自動重寫產生的136條SQL語句進行批運行測試,以選出性能最佳的等效SQL語句。按下「批運行」 按鈕,在「終止條件」 頁選擇「最佳運行時間SQL語句」,按「確定」。
經過幾分鍾的測試運行後,我們可以發現SQL124的運行時間和反應時間最短。運行速度約有22.75倍的提升(源SQL語句運行時間為2.73秒,SQL124運行時間為0.12秒)。現在我們就可以把SQL124放入源代碼中,結束一條SQL語句的優化工作了。

『柒』 如何測試sqlserver性能

對於DBA來講,我們都會做新伺服器的性能測試。我會從TPC的基準測試入手,使用HammerDB做整體性能評估(前身是HammerOra),跟廠商數據對比。再使用DiskSpd針對性的測試磁碟IO性能指標(前身是SQLIO),再到SQLIOSIM測試存儲的完整性,再到ostress並發壓力測試,對於資料庫伺服器遷移,我們還會收集和回放Profiler Trace,並收集期間關鍵性能計數器做對比。
下面我著重談談使用HammerDB的TPC-C來做SQL Server基準測試。
自己寫負載測試代碼很困難
為了模擬資料庫的負載,你想要有多個應用程序用戶和混合數據讀寫的語句。你不想總是對單一行更新相同的值,或者只是重復插入假的值。
自己動手使用Powershell、C#等語言寫負載測試腳本也不是不可能,只是太消耗時間,你需要創建或者恢復資料庫,並做對應的測試。
免費而簡單的壓測SQL Server:使用HammerDB模擬OLTP資料庫負載
HammerDB是一個免費、開源的工具,允許你針對SQL Server、Oracle、MySQL和PostgreSQL等運行TPC-C和TPC-H基準測試。你可以使用HammerDB來針對一個資料庫生成腳本並導入測試。HammerDB也允許你配置一個測試運行的長度,定義暖機階段,對於每個運行的虛擬用戶的數量。
首先,HammerDB有一個自動化隊列,讓你將多個運行在不同級別的虛擬用戶整合到一個隊列--你可以以此獲得在什麼級別下虛擬用戶性能平穩的結果曲線。你也可以用它來模擬用於示範或研究目的的不同負載。
用於SQL Server上的HammerDB的優缺點
HammerDB是一個免費工具,它也極易訪問和快速的啟動基準測試和模擬負載的方法。它的自動程序特性也是的運行工作負載相當自動。
主要缺點是它有一個學習曲線。用戶界面不是很直觀,需要花費時間去習慣。再你使用這個工具一段時間之後,將會更加容易。
HammerDB也不是運行每一個基準測試。它不運行TPC-E基準,例如,SQL Server更熱衷於當前更具發展的OLTP基準TPC-E。如果你用HammerDB運行一個TPC-C基準,你應該理解它不能直接與供應商提供的TPC-C基準結果相比較。但是,它是免費的、快速的、易用的。
基準測試使用案例
基準測試負載不能精確模擬你的應用程序的特點。每個負載是唯一的,在不同的系統有不同的瓶頸。對於很多使用案例,使用預定義的基準測試仍然是非常有效的,包括以下性能的比較:
多個環境(例如:舊的物理伺服器,新的虛擬環境)
使用各種因素的不同及時點(例如:使用共享存儲和共享主機資源的虛擬機的性能)
在配置改變前後的點
當然,對一個資料庫伺服器運行基準測試可以影響其他SQL Server資料庫或者相同主機上其他虛擬機的性能,在生產環境你確保有完善的測試計劃。
對於自學和研究來說,有預配置的負載非常棒。
開始使用基準測試
你可以從閱讀HammerDB官方文檔的「SQL Server OLTP Load Testing Guide」開始。

『捌』 資料庫如何做測試

查詢輸入:
(1)分別對單條件進行精確查詢
(2)輸入長度的檢驗,輸入允許的最長值進行查詢,是否支持
(3)兩個查詢條件是否為2選1,來回選擇是否出現頁面錯誤
(4)輸入字元
(5)輸入特殊字元
(6)輸入數字
(7)輸入漢字
(8)輸入關系表達式與、或、異或、非、等於
(9)輸入空格
(10)條件中含有空格
(11)輸入超長字元
(12)輸入全形字元
(13)輸入單引號
(14)輸入單引號引起來的數據
(15)輸入雙引號
(16)輸入雙引號引起來的數據
(17)如果支持模糊查詢,輸入部分查詢條件
(18)輸入系統中不存在與之匹配的條件
查詢結果檢查
(1)查詢結果按什麼順利排序
(2)查詢結果是否根據欄位顯示排序功能
(3)查詢結果是否有分頁,如果有,每頁最多包含多少記錄
(4)查詢結果是否匹配
(5)查詢結果是否與資料庫一致
(6)查詢結果是精確查詢還是模糊查詢
UI驗證
(1)文字顯示是否正確
(2)頁面是否有錯別字
(3)輸入框大小、文字大小是否合適
(4)頁面是否美觀
(5)查詢結果欄位顯示是否與需求一致
性能方面
(1)查詢處理時間是否能接受
(2)資料庫中存在大數據量數據時,查詢時間是否能接受
(3)當多個用戶同時查詢時,輸入相同或不同的查詢條件系統響應是否及時...