2017-08-08 DBA日記pythonを使用して高同時アクセスデータベースをシミュレート
6359 ワード
一、目的
1.1簡単かつ迅速なカスタム高同時シミュレーション
1.2高同時状況データベースの資源表現を監視する
1.3異なる同時多発数がデータベースに与える影響を観察する
二、設計構想
2.1 pythonのマルチスレッドパケットを使用して、高同時データベース操作をシミュレートし、関連リソースの使用を監視します.
三、コード
四、暗号化
コードの作成が完了したらpython-m py_を使用できます.compile xxx.py
五、効果展示
5.1シミュレーション30人のユーザーが同時に1枚の表に記録を挿入し、1本の記録を挿入するごとにcommit;1回
5.2以下はsarデータ収集記録である.
六、拡張
異なるCPUを同時に収集し,IOデータを後続の解析としてデータベースに保存することができる.
1.1簡単かつ迅速なカスタム高同時シミュレーション
1.2高同時状況データベースの資源表現を監視する
1.3異なる同時多発数がデータベースに与える影響を観察する
二、設計構想
2.1 pythonのマルチスレッドパケットを使用して、高同時データベース操作をシミュレートし、関連リソースの使用を監視します.
三、コード
#-*-coding=utf8 -*-
import
threading
import
cx_Oracle
import
time
import
paramiko
# ,
T_status
=
True
def
CC_ins():
try
:
conn
=
cx_Oracle.connect(
'dbuser'
,
'password'
,
'Tnsnames'
)
cur
=
conn.cursor()
#cur.execute('call dm.qqtproc1()')
cur.callproc(
'dm.qqtproc1'
)
except
Exception as e:
print
e
print
'ora'
else
:
print
'insert successful!'
#
def
Mon_event():
global
T_status
try
:
conn
=
cx_Oracle.connect(
'dbuser'
,
'password'
,
'Tnsnames'
)
cur
=
conn.cursor()
except
Exception as e:
print
e
while
T_status
=
=
True
:
try
:
print
T_status
cur.execute(
'select event from gv$session where username=\'HQQ\''
)
rows
=
cur.fetchall()
for
row
in
rows:
print
row
#cur.callproc('dm.qqtproc1')
except
Exception as e:
print
e
print
'ora'
else
:
print
'successful!'
time.sleep(
1
)
# os
def
Mon_os():
global
T_status
try
:
ssh
=
paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(username
=
'osuser'
,password
=
'ospassword'
,hostname
=
'os_ip'
,port
=
22
)
except
Exception as e:
print
e
while
T_status
=
=
True
:
stdin,stdout,stderr
=
ssh.exec_command(
'sar 1 1'
)
lines
=
stdout.readlines()
print
lines[
-
1
]
time.sleep(
1
)
if
__name__
=
=
'__main__'
:
CC_qty
=
raw_input
(
"please Concurrency QTY:"
)
#CC_qty='20'
T_list
=
[]
if
CC_qty.isdigit() :
for
i
in
range
(
int
(CC_qty)):
t
=
threading.Thread(target
=
CC_ins,args
=
())
T_list.append(t)
T_mon
=
threading.Thread(target
=
Mon_os,args
=
())
T_mon.start()
for
t1
in
T_list:
t1.start()
for
t2
in
T_list:
t2.join()
T_status
=
False
四、暗号化
コードの作成が完了したらpython-m py_を使用できます.compile xxx.py
五、効果展示
5.1シミュレーション30人のユーザーが同時に1枚の表に記録を挿入し、1本の記録を挿入するごとにcommit;1回
5.2以下はsarデータ収集記録である.
六、拡張
異なるCPUを同時に収集し,IOデータを後続の解析としてデータベースに保存することができる.