2017-08-08 DBA日記pythonを使用して高同時アクセスデータベースをシミュレート


一、目的
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   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データを後続の解析としてデータベースに保存することができる.