日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試

瀏覽:30日期:2022-07-03 10:17:18

一、概述

dba在工作中避不開的兩個(gè)問(wèn)題,sql使用綁定變量到底會(huì)有多少的性能提升?數(shù)據(jù)庫(kù)的審計(jì)功能如果打開對(duì)數(shù)據(jù)庫(kù)的性能會(huì)產(chǎn)生多大的影響?最近恰好都碰到了,索性做個(gè)實(shí)驗(yàn)。

sql使用綁定變量對(duì)性能的影響 開通數(shù)據(jù)庫(kù)審計(jì)功能對(duì)性能的影響

實(shí)驗(yàn)采用的辦法很簡(jiǎn)單,就是通過(guò)python讀取csv文件,然后將其導(dǎo)入到數(shù)據(jù)庫(kù)中,最后統(tǒng)計(jì)程序執(zhí)行完成所需要的時(shí)間

二、準(zhǔn)備腳本

python腳本dataimporttest.py

# author: yangbao# function: 通過(guò)導(dǎo)入csv,測(cè)試數(shù)據(jù)庫(kù)性能import cx_Oracleimport time# 數(shù)據(jù)庫(kù)連接串DATABASE_URL = ’user/password@ip:1521/servicename’class CsvDataImport: def __init__(self, use_bind): self.csv_name = ’test.csv’ self.use_bind = use_bind if use_bind == 1: self.insert_sql = 'insert into testtb values(:0, ' 'to_date(:1,’yyyy-mm-dd hh24:mi:ss’), ' 'to_date(:2,’yyyy-mm-dd hh24:mi:ss’), ' ':3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, ' ':15, :16, :17, :18, :19, :20, :21)' # 使用綁定變量的sql else: self.insert_sql = 'insert into testtb values({0}, ' 'to_date(’{1}’,’yyyy-mm-dd hh24:mi:ss’), ' 'to_date(’{2}’,’yyyy-mm-dd hh24:mi:ss’), ' '{3}, {4}, ’{5}’, {6}, ’{7}’, {8}, {9}, {10}, {11}, {12}, {13}, {14}, ' '{15}, {16}, {17}, {18}, {19}, {20}, {21})' # 不使用綁定變量的sql def data_import(self): begin_time = time.perf_counter() try: conn = cx_Oracle.connect(DATABASE_URL) curs = conn.cursor() with open(self.csv_name) as f: csv_contents = f.readlines() import_rows = 0 message = ’{} start to import’.format(self.csv_name) print(message) for line, csv_content in enumerate(csv_contents[1:]): data = csv_content.split(’,’) if self.use_bind == 1: data = map(lambda x: None if x == ’’ else x, data) else: data = map(lambda x: ’null’ if x == ’’ else x, data) data = list(data) data[-1] = data[-1].replace(’n’, ’’) if self.use_bind == 1: curs.execute(self.insert_sql, data) # 使用綁定變量的方式插入數(shù)據(jù) else: # print(self.insert_sql.format(*data)) curs.execute(self.insert_sql.format(*data)) # 使用非綁定變量的方式插入數(shù)據(jù) import_rows += 1 if import_rows % 10000 == 0: curs.execute(’commit’) message = ’{} has imported {} lines’.format(self.csv_name, import_rows) print(message) conn.commit() curs.close() conn.close() end_time = time.perf_counter() elapsed = round(end_time - begin_time, 2) message = ’{}, import rows: {}, use_bind: {}, elapsed: {}’.format( self.csv_name, import_rows, self.use_bind, elapsed) print(message) except Exception as e: message = ’{} import failed, reason: {}’.format(self.csv_name, str(e)) print(message)if __name__ == ’__main__’: CsvDataImport(use_bind=1).data_import()

csv文件test.csv(內(nèi)容略)

三、測(cè)試sql使用綁定變量對(duì)性能的影響a. 使用綁定變量對(duì)庫(kù)進(jìn)行重啟,目的是清空數(shù)據(jù)庫(kù)內(nèi)的所有緩存,避免對(duì)實(shí)驗(yàn)結(jié)果產(chǎn)生干擾

SQL> startup force;SQL> drop table yang.testtb purge;SQL> create table yang.testtb as select * from yang.test where 1=0;

運(yùn)行腳本python dataimporttest.py

結(jié)果:test.csv, import rows: 227795, use_bind: 1, elapsed: 260.31

b. 不使用綁定變量對(duì)庫(kù)進(jìn)行重啟

SQL> startup force;SQL> drop table yang.testtb purge;SQL> create table yang.testtb as select * from yang.test where 1=0;

將腳本的最后一行CsvDataImport(use_bind=1).data_import()改為CsvDataImport(use_bind=0).data_import()

運(yùn)行腳本python dataimporttest.py

結(jié)果:test.csv, import rows: 227795, use_bind: 0, elapsed: 662.82

可以看到同樣的條件下,程序運(yùn)行的時(shí)間,不使用綁定變量是使用綁定變量的2.54倍

四、測(cè)試數(shù)據(jù)庫(kù)開啟審計(jì)功能對(duì)性能的影響查看數(shù)據(jù)庫(kù)審計(jì)功能是否開啟

SQL> show parameter audit NAME TYPE VALUE-------------- ----------- ----------audit_trail string NONE

統(tǒng)計(jì)sys.aud$這張表的行數(shù)

SQL> select count(*) from sys.aud$; COUNT(*)---------- 0

所以可以直接拿第三步中的(a. 使用綁定變量)的結(jié)果作為沒(méi)開通審計(jì)功能程序運(yùn)行的時(shí)間

對(duì)庫(kù)開通審計(jì)功能,并進(jìn)行重啟

SQL> alter system set audit_trail=db,extended scope=spfile; # 如果設(shè)置成db,那么在sys.aud$里面sqltext將為空,也就是說(shuō)看不到用戶執(zhí)行的sql語(yǔ)句,審計(jì)毫無(wú)意義SQL> startup force;SQL> drop table yang.testtb purge;SQL> create table yang.testtb as select * from yang.test where 1=0;SQL> audit insert table by yang; # 開通對(duì)用戶yang的insert操作審計(jì)

將腳本的最后一行CsvDataImport(use_bind=0).data_import()改為CsvDataImport(use_bind=1).data_import()

運(yùn)行腳本python dataimporttest.py

結(jié)果:test.csv, import rows: 227795, use_bind: 1, elapsed: 604.23

與前面使用綁定變量但沒(méi)有開通數(shù)據(jù)庫(kù)審計(jì)功能,程序運(yùn)行的時(shí)間,開通數(shù)據(jù)庫(kù)審計(jì)功能是不開通數(shù)據(jù)庫(kù)審計(jì)功能的2.32倍

再來(lái)看看sys.aud$這張表的大小

SQL> select count(*) from sys.aud$; COUNT(*)---------- 227798

因sys.aud$這張表中的sqltext與sqlbind都是clob字段,因此需要通過(guò)下面的sql去統(tǒng)計(jì)該表所占用的空間

SQL> select sum(bytes) from dba_extents where segment_name in (select distinct name from (select table_name, segment_name from dba_lobs where table_name=’AUD$’) unpivot(name for i in(table_name, segment_name)));SUM(BYTES)---------- 369229824

查看testtb這張表占用的空間

SQL> select sum(bytes) from dba_extents where segment_name in (’TESTTB’);SUM(BYTES)---------- 37748736

可以看到對(duì)一個(gè)22萬(wàn)行的csv數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù),審計(jì)的表占用的空間就達(dá)到了驚人的360M,而testtb這張表本身也才37M而已

通過(guò)上面的實(shí)驗(yàn)可以得出,對(duì)于數(shù)據(jù)庫(kù)的審計(jì)功能,開通后會(huì)嚴(yán)重拖慢數(shù)據(jù)庫(kù)的性能以及消耗system表空間!

五、總結(jié)

代碼中盡量使用綁定變量 最好不要開通數(shù)據(jù)庫(kù)的審計(jì),可以通過(guò)堡壘機(jī)去實(shí)現(xiàn)對(duì)用戶操作審計(jì)(ps:還請(qǐng)大家推薦個(gè)堡壘機(jī)廠商,這個(gè)才是本文最主要的目的_)

實(shí)驗(yàn)存在不嚴(yán)謹(jǐn)?shù)牡胤剑嚓P(guān)對(duì)比數(shù)據(jù)也僅作為參考

以上就是用python對(duì)oracle進(jìn)行簡(jiǎn)單性能測(cè)試的示例的詳細(xì)內(nèi)容,更多關(guān)于python 對(duì)Oracle進(jìn)行性能測(cè)試的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线日韩成人| 蜜桃久久久久久久| 国产日韩欧美在线播放不卡| 亚洲精品福利| 99视频精品全部免费在线视频| 电影亚洲精品噜噜在线观看| 精品亚洲成人| 波多野结衣久久精品| 红杏一区二区三区| 国产美女高潮在线观看| 99国产精品一区二区| 亚洲一区二区三区高清不卡| 日韩欧美另类中文字幕| 国产精品免费大片| av亚洲一区二区三区| 国产亚洲亚洲| 国产精品丝袜在线播放| 国产精品毛片久久| japanese国产精品| 久久久久欧美精品| 亚洲欧美不卡| 日本亚洲欧洲无免费码在线| 欧美日韩va| 成人片免费看| 一级欧洲+日本+国产| 亚洲精品九九| 国产精品手机在线播放| 久久久久久网| 免费视频最近日韩| 国模大尺度视频一区二区| 日韩伦理在线一区| 视频一区二区欧美| 久久一区精品| 欧美黄色一区| 国产丝袜一区| 日韩三区免费| 日本不卡在线视频| 亚洲va久久| 国产成人免费视频网站视频社区| 五月婷婷六月综合| 欧美有码在线| 免费观看久久av| 国产日韩视频在线| 婷婷色综合网| 国产精品第一| 久久蜜桃资源一区二区老牛| 亚洲毛片网站| 国产成人精品福利| 亚洲免费福利一区| 国产乱人伦精品一区| 日韩不卡免费高清视频| 日本在线视频一区二区| 亚洲精品国产嫩草在线观看| 91国内精品| 99热精品在线观看| 亚洲伊人av| 日韩av三区| 香蕉国产精品| 91一区二区| 亚久久调教视频| 亚洲夜间福利| 韩国一区二区三区视频| 日本综合视频| 丝袜诱惑制服诱惑色一区在线观看 | 欧美成人精品三级网站| 日韩av在线播放中文字幕| 中文一区在线| 欧美丝袜一区| 福利一区二区三区视频在线观看| 日本色综合中文字幕| 久久成人精品| 天堂网在线观看国产精品| 高清av一区| 免费亚洲一区| 日韩中文字幕| 另类激情亚洲| 日韩午夜av在线| 99精品电影| 欧美一级鲁丝片| yellow在线观看网址| 精品久久中文| 91亚洲一区| av资源亚洲| 中文字幕成在线观看| 国产91在线播放精品| 国产伊人久久| 在线精品亚洲欧美日韩国产| 成人一区而且| 福利一区和二区| 九九九精品视频| 国产精品亚洲欧美| 国产精品久久久久久久久久白浆| 日本强好片久久久久久aaa| 日本中文字幕一区二区| 热久久国产精品| 日韩精品亚洲专区| 国产欧美丝祙| 精品理论电影在线| 欧美一级鲁丝片| 国产99久久| 最新国产拍偷乱拍精品| 免费日韩一区二区| 水蜜桃久久夜色精品一区的特点| 日韩一区欧美二区| 欧美日韩国产一区二区在线观看| 日韩av二区在线播放| 国产亚洲高清一区| 精品国产亚洲一区二区三区大结局| 精品欧美视频| 99久久亚洲精品蜜臀| 日韩亚洲在线| 日本久久二区| 国产精品毛片aⅴ一区二区三区| 国产精品美女午夜爽爽| 久久免费福利| 久久九九国产| 综合激情在线| 麻豆精品在线| 欧美日中文字幕| 综合激情网站| 国产日韩高清一区二区三区在线 | 日本一二区不卡| 亚洲高清成人| 亚洲tv在线| 精品视频网站| 欧美一区二区三区激情视频| 视频在线观看一区| 欧美国产免费| 捆绑调教日本一区二区三区| 欧美在线网站| 国产精品久久久久毛片大屁完整版 | 黄色不卡一区| 欧美一区二区三区久久精品| 精品三区视频| 国产一级一区二区| 久久成人福利| 99视频一区| 久久国产精品美女| 欧美日韩国产在线一区| 国产精品伦一区二区| 欧美日韩中文字幕一区二区三区 | 蜜桃久久av一区| 精品一级视频| 在线看片日韩| 日本免费久久| 国产欧美高清视频在线| 99精品在线观看| 国产精品一区三区在线观看| 久久亚洲专区| 国产精品66| 美国三级日本三级久久99| a天堂资源在线| 日韩 欧美一区二区三区| 日韩精品水蜜桃| 日韩精品中文字幕一区二区| 欧美亚洲国产精品久久| 久久精品国产精品亚洲毛片| 亚洲视频国产精品| 日韩精品免费一区二区三区| 久久国产人妖系列| 国产99久久| 欧美日韩亚洲一区三区| 狠狠爱成人网| 91综合视频| 一区二区自拍| 日韩国产欧美一区二区| 日韩va欧美va亚洲va久久| 日韩电影在线视频| 亚洲资源网站| 国产精品成人国产| 久久亚洲视频| 99精品网站| 麻豆一区在线| 日韩精品a在线观看91| 91久久视频| 日本一区二区高清不卡| 国产欧美一级| 免费在线成人网| 99成人在线视频| 精品国产a一区二区三区v免费| 免费看日韩精品| 欧美日韩亚洲在线观看| 国产精品久久久久久久久免费高清 | 丝袜亚洲另类欧美| 麻豆极品一区二区三区| 亚洲精品电影| 精品丝袜久久| 亚洲91网站| 99在线|亚洲一区二区| 国产精品入口久久| 精品免费av在线| 国产日韩三级| 欧美中文日韩| 久久青草久久| 欧美国产亚洲精品| 亚洲欧美网站| 另类中文字幕国产精品| 美女免费视频一区| 久久av日韩| 日韩精品一级|