今天作了一個簡單的測試數據庫壓力,把東西分享了一下。python
服務器狀況:sql
操做系統版本:CentOS 5.6 -64數據庫
cpu:Intel(R) Xeon(R) CPU X5660 @ 2.80GHz * 24c#
內存:Mem: 16425876服務器
Swap: 32764556session
數據庫版本:oracle10gR2oracle
節點個數:2 ide
測試方法以下:經過awr找出測試系統裏面消耗比較多sql(能夠是IO或者是執行時間)性能
使用python寫了以下腳本測試
#! /usr/bin/python
#coding=UTF-8
import cx_Oracle
import time
def hello():
'''''Hello cx_Oracle示例:
1)打印數據庫版本信息.
2)查詢表數據.'''
conn = cx_Oracle.connect("jscn/jscn@192.168.100.199:1521/jscn")
cur = conn.cursor()
try:
print "Oracle Version:%s" % conn.version
print "Table SUB_POLICY rows:"
interger = 1
while interger <= 30000000:
sql="select * from product PRODUCT_ID= '0lea940'"
sql1="select * from productcategory where CATEGORY_ID='xhn6238'"
cur.execute(sql)
for row in cur:
print row
time.sleep(1)
cur.execute(sql1)
for row in cur:
print row
time.sleep(10)
interger = interger + 1
finally:
cur.close()
conn.close()
hello()
這裏要首先安裝好python和cx_Oracle,關於如何安裝這兩個軟件,能夠本身百度,過幾天我把個人安裝方法寫上去。
讓我麼簡單看看這個python腳本,若是童鞋們要用這個腳本,只要修改鏈接串和sql部分就能夠了,在這個腳本里面,首先執行"sql",而後休息1秒鐘,再執行"sql1"部分,再休息10,這個就是一個循環,一共循環30000000次。
友情提醒一下python對空格特別敏感,複製的時候要當心了。
若是隻是簡單執行這一個腳本,那叫什麼壓力測試呢,這個時候要請其餘童鞋協助了,在dos下執行以下命令,win7下面最好使用管理員用戶執行。
--切換到腳本所在的目錄,執行如下命令
for /L %i in (1,1,50) do start "test %i" python test.py
這個腳本是把這個test.py執行開50個窗口執行。
若是想中止,能夠執行如下命令
taskkill /im python.exe
如今讓咱們來看一下數據庫的性能,
一、查看節點的鏈接數,到兩個節點上面分別查看數據庫的鏈接數
登陸到第一個節點,查看python鏈接數
SQL> select count(*) from v$session where program='python.exe' ;
COUNT(*)
----------
24
登陸到第二個節點,查看python鏈接數
SQL> select count(*) from v$session where program='python.exe' ;
COUNT(*)
----------
26
查看總的鏈接數
SQL> select count(*) from gv$session where program='python.exe' ;
COUNT(*)
----------
50
二、查看每一個用戶的pga分配大小
Select spid ,Value / 1024 / 1024 Mb
From V$session s, V$sesstat St, V$statname Sn, V$process p
Where St.Sid = s.Sid
And St.Statistic# = Sn.Statistic#
And Sn.Name Like 'session pga memory'
And p.Addr = s.Paddr and s.program='python.exe'
Order By Value Desc;
SPID MB
------------ ----------
1936 0.73026275
1906 0.73026275
1955 0.73026275
1940 0.73026275
1953 0.73026275
1946 0.73026275
1934 0.73026275
1942 0.73026275
1972 0.73026275
1959 0.73026275
1900 0.73026275
1961 0.73026275
1970 0.73026275
1968 0.73026275
1957 0.73026275
1902 0.73026275
1904 0.73026275
1919 0.73026275
1938 0.73026275
1923 0.73026275
SPID MB
------------ ----------
1921 0.73026275
1925 0.73026275
1917 0.73026275
1910 0.73026275
1908 0.73026275
1927 0.73026275
這裏0.73026275*用戶數<pga的大小。
三、查看數據庫服務器每一個spid對應的內存使用狀況(下面舉例說明)
[oracle@rac2 ~]$ top -p 1936,1906,1955,1940
top - 19:30:49 up 11 days, 9:24, 1 user, load average: 0.08, 0.08, 0.03
Tasks: 4 total, 0 running, 4 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.1%sy, 0.0%ni, 99.6%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16425876k total, 6192932k used, 10232944k free, 422484k buffers
Swap: 32764556k total, 344k used, 32764212k free, 3581576k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1936 oracle 15 0 1681m 26m 22m S 0.0 0.2 0:00.13 oracle
1906 oracle 15 0 1681m 26m 22m S 0.0 0.2 0:00.14 oracle
1955 oracle 15 0 1681m 26m 22m S 0.0 0.2 0:00.12 oracle
1940 oracle 15 0 1681m 26m 22m S 0.0 0.2 0:00.15 oracle
這裏RES的值*個數<總內存。
呵呵,結束了,簡單吧。