一個很簡單測試oracle壓力方法

今天作了一個簡單的測試數據庫壓力,把東西分享了一下。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的值*個數<總內存。

 

呵呵,結束了,簡單吧。

相關文章
相關標籤/搜索