當前位置:首頁 » 編程語言 » 查看sql性能

查看sql性能

發布時間: 2024-10-28 14:41:43

Ⅰ 幾個檢查資料庫性能的sql語句

SIMPLE:簡單SELECT(不使用UNION或子查詢等)
PRIMARY:最外面的SELECT
UNION:UNION中的第二個或後面的SELECT語句
DEPENDENTUNION:UNION中的第二個或後面的SELECT語句,取決於外面的查詢
UNIONRESULT:UNION的結果。
SUBQUERY:子查詢中的第一個SELECT
DEPENDENTSUBQUERY:子查詢中的第一個SELECT,取決於外面的查詢
DERIVED:導出表的SELECT(FROM子句的子查詢)

Ⅱ PL/SQl怎麼測試一個sql語句的性能

一段SQL代碼寫好以後,可以通過查看SQL的執行計劃,初步預測該SQL在運行時的性能好壞,尤其是在發現某個SQL語句的效率較差時,我們可以通過查看執行計劃,分析出該SQL代碼的問題所在。

1、 打開熟悉的查看工具:PL/SQL Developer。
在PL/SQL Developer中寫好一段SQL代碼後,按F5,PL/SQL Developer會自動打開執行計劃窗口,顯示該SQL的執行計劃。

2、 查看總COST,獲得資源耗費的總體印象
一般而言,執行計劃第一行所對應的COST(即成本耗費)值,反應了運行這段SQL的總體估計成本,單看這個總成本沒有實際意義,但可以拿它與相同邏輯不同執行計劃的SQL的總體COST進行比較,通常COST低的執行計劃要好一些。

3、 按照從左至右,從上至下的方法,了解執行計劃的執行步驟
執行計劃按照層次逐步縮進,從左至右看,縮進最多的那一步,最先執行,如果縮進量相同,則按照從上而下的方法判斷執行順序,可粗略認為上面的步驟優先執行。每一個執行步驟都有對應的COST,可從單步COST的高低,以及單步的估計結果集(對應ROWS/基數),來分析表的訪問方式,連接順序以及連接方式是否合理。

4、 分析表的訪問方式
表的訪問方式主要是兩種:全表掃描(TABLE ACCESS FULL)和索引掃描(INDEX SCAN),如果表上存在選擇性很好的索引,卻走了全表掃描,而且是大表的全表掃描,就說明表的訪問方式可能存在問題;若大表上沒有合適的索引而走了全表掃描,就需要分析能否建立索引,或者是否能選擇更合適的表連接方式和連接順序以提高效率。

5、 分析表的連接方式和連接順序
表的連接順序:就是以哪張表作為驅動表來連接其他表的先後訪問順序。
表的連接方式:簡單來講,就是兩個表獲得滿足條件的數據時的連接過程。主要有三種表連接方式,嵌套循環(NESTED LOOPS)、哈希連接(HASH JOIN)和排序-合並連接(SORT MERGE JOIN)。我們常見得是嵌套循環和哈希連接。
嵌套循環:最適用也是最簡單的連接方式。類似於用兩層循環處理兩個游標,外層游標稱作驅動表,Oracle檢索驅動表的數據,一條一條的代入內層游標,查找滿足WHERE條件的所有數據,因此內層游標表中可用索引的選擇性越好,嵌套循環連接的性能就越高。
哈希連接:先將驅動表的數據按照條件欄位以散列的方式放入內存,然後在內存中匹配滿足條件的行。哈希連接需要有合適的內存,而且必須在CBO優化模式下,連接兩表的WHERE條件有等號的情況下才可以使用。哈希連接在表的數據量較大,表中沒有合適的索引可用時比嵌套循環的效率要高。

Ⅲ 檢查SQL語句性能

exlpain sql語句

Ⅳ 如何使用loadrunner測試SQL查詢語句的性能

第一步測試准備 第二步配置ODBC數據源 第三步錄制SQL語句在Sql Server查詢分析器中的運行過程 第四步優化錄制腳本設置事務 第五步改變查詢數量級查看SQL語句的性能 第六步在controller中運行腳本 下面開始具體的介紹 測試准備階段我們首先要確認測試資料庫伺服器我們可以在本地安裝SQLSERVER資料庫服務端及客戶端也可以確定一台裝好的SQL SERVER伺服器 接下來准備測試數據對資料庫測試時我們要考慮的不是SQL語句是否能夠正確執行而是在某數量級的情況下SQL語句的執行效率及資料庫服務的運行情況所以我們分別准備不同數量級的測試數據即根據實際的業務情況預估資料庫中的記錄數在本次講解中我們不考慮業務邏輯也不考慮數據表之間的關系我們只建立一張表並向此表中加入不同數量級的數據如分別加入條條條條數據查看某SQL語句的執行效率 在查詢分析器中運行如下腳本 創建測試資料庫 create database loadrunner_test; use loadrunner_test 創建測試數據表 create table test_table (username varchar()sex intage intaddress varchar()post int) 通過一段程序插入不同數量級的記錄具體的語法在這里就不多說了 declare @i int set @i=while @i< //循環次可以根據測試數據情況改變插入條數 begin BEGIN TRAN T insert into test_table (usernamesexageaddresspost) values (戶瑞海+cast(@i as varchar)@i@i+北京市和平里+cast(@i as varchar)+號); IF @@ERROR <> begin rollback; select @@error end else begin commit; set @i = @i+ end end 好了執行完上述語句後建立的數據表中已經有條記錄了下面進行第二步的操作配置ODBC數據源為了能讓loadrunner能夠通過ODBC協議連接到我們建立的SQL SERVER數據路我們需要在本機上建立ODBC數據源建立方法如下 控制面板—性能和維護—管理工具—數據源(ODBC)添加在列表中選擇SQL SERVER點擊完成根據向導輸入數據源名稱鏈接的伺服器下一步輸入鏈接資料庫的用戶名和密碼更改鏈接的資料庫完成ODBC的配置如果配置正確的話在最後一步點擊測試數據源會彈出測試成功的提示 配置好ODBC數據源後就要錄制SQL語句在查詢分析器中的執行過程了 打開loadrunner選擇ODBC協議 在start recording中的application type 選擇win applicationprogram to record中錄入SQL SERVER查詢分析器的路徑\安裝目錄\isqlwexe 開始錄制首先通過查詢分析器登錄SQL SERVER在打開的查詢分析器窗口中輸入要測試的SQL語句如select * from test_table; 在查詢分析器中執行該語句執行完成後結束錄制 好了現在就可以看到loadrunner生成的腳本了(由於腳本過長在這里就不粘貼了有需要的朋友可以加我QQ我把腳本發給你們)通過這些語句我們可以看出登錄資料庫的過程執行SQL語句的過程 接下來我們來優化腳本我們分別為資料庫登錄部分和執行SQL語句的部分加一個事物在增加一個double的變數獲取事務執行時間簡單內容如下 Action() { double trans_time; //定義一個double型變數用來保存事務執行時間 lr_start_transaction(sqserver_login); //設置登錄事務的開始 lrd_init(&InitInfo DBTypeVersion); //初始化鏈接(下面的都是loadrunner生成的腳本了大家可以通過幫助查到每個函數的意思) lrd_open_context(&CtxLRD_DBTYPE_ODBC ); lrd_db_option(Ctx OT_ODBC_OV_ODBC ); lrd_alloc_connection(&Con LRD_DBTYPE_ODBC Ctx /*Unused*/ ); ……………… trans_time=lr_get_transaction_ration( sqserver_login ); //獲得登錄資料庫的時間 lr_output_message(sqserver_login事務耗時 %f 秒 trans_time); //輸出該時間 lr_end_transaction(sqserver_login LR_AUTO); //結束登錄事務 lr_start_transaction(start_select);//開始查詢事務 lrd_cancel( Csr /*Unused*/ ); lrd_stmt(Csr select * from test_table;\r\n /*None*/ );//此句為執行的SQL lrd_bind_cols(Csr BCInfo_D ); lrd_fetch(Csr PrintRow ); …………… trans_time=lr_get_transaction_ration( start_select ); //獲得該SQL的執行時間 lr_output_message(start_select事務耗時 %f 秒 trans_time); //輸出該時間 lr_end_transaction(start_select LR_AUTO); //結束查詢事務 優化後在執行上述腳本後就可以得到登錄到資料庫的時間及運行select * from test_table這條語句的時間了當然我們也可以根據實際情況對該條語句進行參數化可以測試多條語句的執行時間也可以將該語句改為調用存儲過程的語句來測試存儲過程的運行時間 接下來把該腳本在controller中運行設置虛擬用戶數設置集合點這些操作我就不說了但是值得注意的是沒有Mercury 授權的SQL SERVER用戶license在運行該腳本時回報錯提示You do not have a license for this Vuser type Please contact Mercury Interactive to renew your license我們公司窮啊買不起loadrunner所以我也無法繼續試驗希望有license朋友們監控一下運行結果! 最起碼在VUGen中運行該腳本我們可以得到任意一個SQL語句及存儲過程的執行時間如果我們測試的B/S結構的程序我們也可以通過HTML協議錄制的腳本在CONTROLLER中監控SQL SERVER伺服器的性能情況這樣兩方面結合起來就可以對資料庫性能做一個完整的監控了

Ⅳ 如何查看SQL資料庫內容

1、首先,打開SQL Server的電腦軟體,進入軟體載入界面等待載入。

Ⅵ 測試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

Ⅶ 如何查詢oracle 資料庫性能,sql資源佔用

作為一個開發/測試人員,或多或少都得和資料庫打交道,而對資料庫的操作歸根到底都是SQL語句,所有操作到最後都是操作數據,那麼對sql性能的掌控又成了我們工作中一件非常重要的工作。下面簡單介紹下一些查看oracle性能的一些實用方法:

1、查詢每台機器的連接數

selectt.MACHINE,count(*)fromv$sessiontgroupbyt.MACHINE

這里所說的每台機器是指每個連接oracle資料庫的伺服器,每個伺服器都有配置連接資料庫的連接數,以websphere為例,在數據源中,每個數據源都有配置其最大/最小連接數。

執行SQL後,可以看到每個伺服器連接oracle資料庫的連接數,若某個伺服器的連接數非常大,或者已經達到其最大連接數,那麼這台伺服器上的應用可能有問題導致其連接不能正常釋放。

2、查詢每個連接數的sql_text

v$session表裡存在的連接不是一直都在執行操作,如果sql_hash_value為空或者0,則該連接是空閑的,可以查詢哪些連接非空閑,web3是機器名,就是WebSphereApplicationServer的主機名。

selectt.sql_hash_value,t.*fromv$sessiontwheret.MACHINE='web3'andt.sql_hash_value!=0

這個SQL查詢出來的結果不能看到具體的SQL語句,需要看具體SQL語句的執行下面的方法。

3、查詢每個活動的連接執行什麼sql

selectsid,username,sql_hash_value,b.sql_text

fromv$sessiona,v$sqltextb

wherea.sql_hash_value=b.HASH_VALUEanda.MACHINE='web3'

orderbysid,username,sql_hash_value,b.piece

orderby這句話的作用在於,sql_text每條記錄不是保存一個完整的sql,需要以sql_hash_value為關鍵id,以piece排序,如圖

Username是執行SQL的資料庫用戶名,一個sql_hash_value下的SQL_TEXT組合成一個完整的SQL語句。這樣就可以看到一個連接執行了哪些SQL。

4、.從V$SQLAREA中查詢最佔用資源的查詢

selectb.usernameusername,a.disk_readsreads,a.executionsexec,

a.disk_reads/decode(a.executions,0,1,a.executions)rds_exec_ratio,

a.sql_textStatement

fromv$sqlareaa,dba_usersb

wherea.parsing_user_id=b.user_id

anda.disk_reads>100000

orderbya.disk_readsdesc;

用buffer_gets列來替換disk_reads列可以得到佔用最多內存的sql語句的相關信息。

V$SQL是內存共享SQL區域中已經解析的SQL語句。

該表在SQL性能查看操作中用的比較頻繁的一張表,關於這個表的詳細信息大家可以去http://apps.hi..com/share/detail/299920#上學習,介紹得比較詳細。我這里主要就將該表的常用幾個操作簡單介紹一下:

1、列出使用頻率最高的5個查詢:

selectsql_text,executions

from(selectsql_text,executions,

rank()over

(orderbyexecutionsdesc)exec_rank

fromv$sql)

whereexec_rank<=5;

該查詢結果列出的是執行最頻繁的5個SQL語句。對於這種實用非常頻繁的SQL語句,我們需要對其進行持續的優化以達到最佳執行性能。

2、找出需要大量緩沖讀取(邏輯讀)操作的查詢:

selectbuffer_gets,sql_text

from(selectsql_text,buffer_gets,

dense_rank()over

(orderbybuffer_getsdesc)buffer_gets_rank

fromv$sql)

wherebuffer_gets_rank<=5;

這種需要大量緩沖讀取(邏輯讀)操作的SQL基本是大數據量且邏輯復雜的查詢中會遇到,對於這樣的大數據量查詢SQL語句更加需要持續的關注,並進行優化。

3、持續跟蹤有性能影響的SQL。

SELECT*FROM(

SELECTPARSING_USER_ID,EXECUTIONS,SORTS,

COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea

ORDERBYdisk_readsDESC

)

WHEREROWNUM<10

這個語句在SQL性能查看中用的比較多,可以明顯的看出哪些SQL會影響到資料庫性能。

本文主要介紹了使用SQL查詢方式查看oracle資料庫SQL性能的部分常用方法。此外還有許多工具也能實現SQL性能監控,大家可以在網上搜索相關知識進行學習。


轉載僅供參考,版權屬於原作者

熱點內容
安卓如何設置手機快捷方式 發布:2024-11-23 18:30:29 瀏覽:146
安卓怎麼把系統帶的軟體刪了 發布:2024-11-23 18:16:13 瀏覽:319
linux服務程序 發布:2024-11-23 18:07:22 瀏覽:964
我的世界國際版伺服器低延遲推薦ip 發布:2024-11-23 18:02:35 瀏覽:351
文件存儲支持隨機存取 發布:2024-11-23 18:02:24 瀏覽:201
iosapp資料庫 發布:2024-11-23 18:01:36 瀏覽:480
分段函數編譯程序 發布:2024-11-23 17:59:20 瀏覽:508
中間演算法 發布:2024-11-23 17:43:12 瀏覽:815
私鑰加密演算法 發布:2024-11-23 17:39:08 瀏覽:992
ghostlinux 發布:2024-11-23 17:37:35 瀏覽:352