Insert插入不同的列数量,统计信息对比
一、实验目的:
Insert插入表中相同的行数量,不同的列数量,通过10046 和autotrace工具对比查看逻辑读、物理读、time数据,并得出相应结论
二、测试
2.1测试流程:
=>【为尽可能满足测试数据可靠性,提前准备好操作流程】
=>实验数据及环境的准备:
#目标端环境准备:授予用户yang表空间的使用权限、
转储目录的创建及读写权限授予给yang用户
及 开启autotrace工具的权限
#源库使用数据泵导出一张表的测试数据,操作系统命令scp远程传输至目标端,目标端使用Impdp导入测试环境中,得到测试源表及数据后,创建一个与源表结构相同的测试表(结构相同,没有数据)
#查询验证源表,测试表是否满足上述条件,测试表是否有约束,有则禁用约束
=>会话监控10046 level 1事件开启、自动追踪 autotrace开启
会话一、使用SYS用户登录:对会话二进行10046 trace level 1事件追踪
会话二、使用yang用户登录:开启set autotrace traceonly 开启自动追踪工具
=>insert操作执行:
yang用户:执行第一个insert 操作,对测试表中所有的数据进行插入
commit提交后,truncate 截断清空测试表
yang用户:执行第二个insert操作,对测试表中的三个列数据进行插入
commit提交后
=>autotrace工具收集信息对比:
逻辑读、物理读、执行时间统计对比
=>结束会话追踪,生成trace文件,10046事件收集信息对比:
逻辑读、物理读、执行时间统计对比
=>对比结果进行分析,得出相应结论
2.2测试操作说明:
2.2.1工具说明:
=>10046事件:可以跟踪应用程序执行的SQL语句,根据开启的追踪级别不同:查询不同级别的信息
Level 1: 可以查看包含解析、执行、提取、提交、回滚等信息记录
Level 4: 可以查看包含解析、执行、提取、提交、回滚的信息 + 变量详细信息
Level 8: 可以查看包含解析、执行、提取、提交、回滚的信息 + 等待事件
Level 12:可以查看包含解析、执行、提取、提交、回滚的信息 + 绑定变量+等待事件
=>autotrace 自动追踪工具:可以查看SQL执行结果、执行计划、统计信息的查看
#授予表空间存储无限制权限
SQL> grant resource to yang;
#授予yang用户可以开启autotrace权限
@?/sqlplus/admin/plustrce
SQL> grant plustrace to yang;
#创建转储目录
SQL> create directory yy as '/home/oracle';
#转储目录读写授予yang用户
SQL> grant read,write on directory yy to yang;
#查询转储目录
SQL> select directory_name,directory_path from dba_directories;
DIRECTORY_NAME DIRECTORY_PATH
--------------------------------------------------------
YY /home/oracle
=>源端数据导出,操作系统SCP命令远程传输文件至目标端
#测试数据从源库导出: expdp \'/ as sysdba\' DIRECTORY=DMPDIR logfile=G_BIL_C_DAT_LTE_206_T_20180414.log DUMPFILE=G_BIL_C_DAT_LTE_206_T_20180414.dmp tables='gat.G_BIL_C_DAT_LTE_206_T_20180414' query='"where rownum<12000"' #操作系统SCP远程拷贝$ scp G_BIL_C_DAT_LTE_206_T_20180414.dmp 192.168.20.67:/home/oracle/. #源库查询信息:表的用户名称,表所在的表空间
SQL> select owner,tablespace_name from dba_segments where segment_name='G_BIL_C_DAT_LTE_206_T_20180414';
OWNER TABLESPACE_NAME
--------------------------------------------------------------------------------
GAT TBSFSH_DATA21
=>目标端:导入并创建测试表,查询验证
#查询目标端测试用户yang的默认永久表空间
SQL> select username,DEFAULT_TABLESPACE from dba_users where username='YANG';
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
YANG USERS
#导入源表
[oracle@bj ~]$ impdp yang/yang directory=yy
dumpfile=G_BIL_C_DAT_LTE_206_T_20180414.dmp
remap_schema=GAT:yang remap_tablespace=TBSFSH_DATA21:users
#查询源表有多少行数据
SQL> select count(*) from G_BIL_C_DAT_LTE_206_T_20180414;
COUNT(*)
----------
#创建测试表:
CREATE TABLE "YANG"."G_BIL_C_DATA_LTE_20180414"
( ,) NOT NULL ENABLE,
,) NOT NULL ENABLE,
,) NOT NULL ENABLE,
,) NOT NULL ENABLE,
) NOT NULL ENABLE,
,),
---此处省略107个列---
) SEGMENT CREATION IMMEDIATE
PCTFREE PCTUSED INITRANS MAXTRANS COMPRESS BASIC NOLOGGING
STORAGE(INITIAL NEXT MINEXTENTS MAXEXTENTS
PCTINCREASE FREELISTS FREELIST GROUPS
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS";
#查询测试表的约束名称:
SQL> select 'alter table '||table_name||' disable constraint '||CONSTRAINT_NAME||';' "Script" from user_constraints where table_name='G_BIL_C_DATA_LTE_20180414' and status='ENABLED';
Script
--------------------------------------------------------------------------------
alter table G_BIL_C_DATA_LTE_20180414 disable constraint SYS_C004285;
--此处省略剩余6条语句
#执行上述禁用约束SQL:
alter table G_BIL_C_DATA_LTE_20180414 disable constraint SYS_C004285;
--此处省略剩余6条语句
#再次查询验证:测试表是否还有约束启用
SQL> select 'alter table '||table_name||' disable constraint '||CONSTRAINT_NAME||';' "Script" from user_constraints where table_name='G_BIL_C_DATA_LTE_20180414' and status='ENABLED';
no rows selected
=>会话监控10046 level 1事件开启、自动追踪 autotrace开启
会话一、使用SYS用户登录:对会话二进行10046 trace level 1事件追踪
#yang用户查询当前会话的操作系统进程号
SQL> select spid from v$process a,v$session b where a.addr=b.paddr and b.sid=(select sid from v$mystat where rownum=1); SPID ------------------------ 29062 #SYS用户进行监控SQL> show userUSER is "SYS"SQL> oradebug setospid 29062;Oracle pid: 34, Unix process pid: 29062, image: oracle@bj (TNS V1-V3)SQL> oradebug event 10046 trace name context forever,level 1;Statement processed.
会话二、使用yang用户登录:开启set autotrace traceonly 开启自动追踪工具
#yang用户开启自动追踪开关 SQL> set autotrace traceonly;
=>insert操作执行:
yang用户:执行第一个insert 操作,对测试表中所有的数据进行插入
commit提交后,truncate 截断清空测试表
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID
,FILE_ID
,BATCH_ID
,SWITCH_ID
,SELF_CELL_ID
,SELF_MSC_ID
###此处省略剩余表的所有列名称###
,RATABLE_RESOURCE_LIST
,FLUX_CARD_LIST) select trim(TICKET_ID)
,trim(FILE_ID )
,trim(BATCH_ID )
,trim(SWITCH_ID )
,trim(SELF_CELL_ID )
,trim(SELF_MSC_ID )
###此处省略剩余表的所有列名称###
,trim(FLUX_CARD_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t;
AUTOTRACE工具信息记录:
Execution Plan ----------------------------------------------------------
| Id | Operation | Name | Rows | Byte s | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------
Plan hash value: | | INSERT STATEMENT | | | 200M| ()| :: | |
| | LOAD TABLE CONVENTIONAL | G_BIL_C_DATA_LTE_20180414 | | | | | | |
| | PARTITION LIST ALL | | | 200M| ()| :: | |
| | TABLE ACCESS FULL | G_BIL_C_DAT_LTE_206_T_20180414 | | 200M| ()| :: | | |
--------------------------------------------------------------------------------
Note
-----
- )
Statistics
----------------------------------------------------------
recursive calls
db block gets
consistent gets
physical reads
redo size
bytes sent via SQL*Net to client
bytes received via SQL*Net from client
SQL*Net roundtrips to/from client
sorts (memory)
sorts (disk)
rows processed
第一次操作:结束
SQL> commit; Commit complete. SQL> truncate table G_BIL_C_DATA_LTE_20180414;
yang用户:执行第二个insert操作,对测试表中的三个列数据进行插入
commit提交后
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID, BSID, IPV6_PDSN_ADDRESS, RATABLE_RESOURCE_LIST) select trim(TICKET_ID), trim(BSID ), trim(IPV6_PDSN_ADDRESS ), trim(RATABLE_RESOURCE_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t;
AUTOTRACE工具信息记录:
Execution Plan
----------------------------------------------------------
Plan hash value: 2515889339
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 24031 | 50M| 261 (1)| 00:00:04 | | |
| 1 | LOAD TABLE CONVENTIONAL | G_BIL_C_DATA_LTE_20180414 | | | | | | |
| 2 | PARTITION LIST ALL | | 24031 | 50M| 261 (1)| 00:00:04 | 1 | 2 |
| 3 | TABLE ACCESS FULL | G_BIL_C_DAT_LTE_206_T_20180414 | 24031 | 50M| 261 (1)| 00:00:04 | 1 | 2 |
---------------------------------------------------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
24 recursive calls
25795 db block gets
1081 consistent gets
0 physical reads
10095484 redo size
841 bytes sent via SQL*Net to client
1045 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
23998 rows processed
=>autotrace工具收集信息对比:
逻辑读、物理读、执行时间统计对比
|
Autotrace |
逻辑读 consistent gets |
物理读 physical reads |
TIME 时-分-秒 |
|
Insert插入表的所有列(全表总计94个列) |
2057 |
1 |
00:00:04 |
|
Insert插入表的四个列 |
1081 |
0 |
00:00:04 |
=>结束会话追踪,生成trace文件,10046事件收集信息对比:
SQL> oradebug trace name context off; Statement processed. SQL> show parameter user_dump_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ user_dump_dest string /picclife/app/oracle/diag/rdbms/aa/dingding/trace[oracle@bj admin]$ cd /picclife/app/oracle/diag/rdbms/aa/dingding/trace[oracle@bj trace]$ ls *29062.trcdingding_ora_29062.trc [oracle@bj trace]$ tkprof dingding_ora_29062.trc /home/oracle/select.trc sys=no
#trace文件中第一次Insert,全表所有列的插入操作:
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID
,FILE_ID
,BATCH_ID ****此处省略90个列名称 ,FLUX_CARD_LIST) select trim(TICKET_ID) ,trim(FILE_ID )
,SELF_CELL_ID
****此处省略90个列名称
,trim(FLUX_CARD_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.02 0.02 0 3 0 0
Execute 1 8.64 15.29 1 1062 30554 23998
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 8.66 15.32 1 1065 30554 23998
#parse解析#execute执行#fetch获取#elapsed 执行时间#query 逻辑读#disk 物理读#current 当前读#rows 处理行数
#解析期间:库缓存中未命中:硬解析1次
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 54
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
0 0 0 LOAD TABLE CONVENTIONAL (cr=1179 pr=1 pw=0 time=15305076
us)
23998 23998 23998 PARTITION LIST ALL PARTITION: 1 2 (cr=957 pr=0 pw=0 time=
74766 us cost=262 size=209742568 card=24031)
23998 23998 23998 TABLE ACCESS FULL G_BIL_C_DAT_LTE_206_T_20180414 PARTITI
ON: 1 2 (cr=957 pr=0 pw=0 time=67557 us cost=262 size=209742568 card=24031)
#trace文件中第二次Insert,四个列的插入操作:
insert /*+ parallel(t,4) */ into yang.G_BIL_C_DATA_LTE_20180414 t (TICKET_ID,
BSID,
IPV6_PDSN_ADDRESS,
RATABLE_RESOURCE_LIST) select trim(TICKET_ID),
trim(BSID ),
trim(IPV6_PDSN_ADDRESS ),
trim(RATABLE_RESOURCE_LIST) from yang.G_BIL_C_DAT_LTE_206_T_20180414 t
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 2 0 0
Execute 1 0.28 0.31 0 1000 25794 23998
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.28 0.31 0 1002 25794 23998
#解析期间:库缓存中未命中:硬解析1次
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 54
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
0 0 0 LOAD TABLE CONVENTIONAL (cr=1006 pr=0 pw=0 time=315302 us
)
23998 23998 23998 PARTITION LIST ALL PARTITION: 1 2 (cr=957 pr=0 pw=0 time=
52444 us cost=261 size=53060448 card=24031)
23998 23998 23998 TABLE ACCESS FULL G_BIL_C_DAT_LTE_206_T_20180414 PARTITI
ON: 1 2 (cr=957 pr=0 pw=0 time=47368 us cost=261 size=53060448 card=24031)
逻辑读、物理读、执行时间统计对比
|
10046 工具level1 |
逻辑读 query |
物理读 disk |
TIME Elapsed(单位微秒) 1s=1,000,000微秒 |
|
Insert插入表的所有列(全表总计94个列) |
1065 |
1 |
15.32 |
|
Insert插入表的四个列 |
1002 |
0 |
0.31 |
|
Autotrace |
逻辑读 consistent gets |
物理读 physical reads |
TIME 时-分-秒 |
|
Insert插入表的所有列(全表总计94个列) |
2057 |
1 |
00:00:04 |
|
Insert插入表的四个列 |
1081 |
0 |
00:00:04 |
=>对比结果进行分析,得出相应结论
结论一、以上两个工具查询的统计信息对比:
Insert操作,插入的列数量越多,消耗的逻辑读就越多,代价也越大
结论二、autotrace工具显示的时间不准确,从逻辑读降低一半,但是执行时间根本没有减少
=>工具使用对比:autotrace || 10046
使用autotrace操作更加简便,但是只能当前用户执行,当前用户下查看
使用10046,操作复杂一点,但是可以查看监控其它用户下执行的sql,且执行时间维度更加精确,收集的统计信息更多。
Insert插入不同的列数量,统计信息对比的更多相关文章
- Oracle性能优化之oracle里表、索引、列的统计信息
一.表的统计信息 表的统计信息用于描述表的详细信息,包括记录数(num_rows).表块的数量(blocks).平均行长度(avg_row_len)等典型维度.这些维度可以通过数据字典表DBA_TAB ...
- SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)
本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...
- 全废话SQL Server统计信息(2)——统计信息基础
接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...
- 基于Oracle的SQL优化(崔华著)-整理笔记-第5章“Oracle里的统计信息”
第5章“Oracle里的统计信息” 详细介绍了Oracle数据库里与统计信息相关的各个方面的内容,包括 Oracle数据库中各种统计信息的分类.含义.收集和查看方法,以及如何在Oracle数据库里正确 ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- 使用analyze命令统计信息
① 搜集和删除索引.表和簇的统计信息② 验证表.索引和簇的结构③ 鉴定表和簇和行迁移和行链接针对analyze的搜集和删除统计信息功能而言Oracle推荐使用DBMS_STATS包来代替analyze ...
- Oracle中的统计信息
一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...
- MS SQL统计信息浅析下篇
MS SQL统计信息浅析上篇对SQL SERVER 数据库统计信息做了一个整体的介绍,随着我对数据库统计信息的不断认识.理解,于是有了MS SQL统计信息浅析下篇. 下面是我对SQL Serve ...
- 收集oracle统计信息
优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分 ...
随机推荐
- 【数据库】SQL语句
SQL 分为两个部分:数据操作语言(DML)和 数据定义语言(DDL).增删改查(CRUD)构成了 SQL 的 DML 部分. SELECT - 从数据库表中获取数据 SELECT 列名 FROM 表 ...
- [luogu P1552] [APIO2012]派遣
[luogu P1552] [APIO2012]派遣 题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除 ...
- js修改样式
添加.删除class: $("#id").addClass("someClass"); $("#id").removeClass(" ...
- js 数组api
Javascript Array API JS数组对象提供了很多API方法,要用到的朋友可以查阅哈,如有错误欢迎指正. /** * Created by Administrator on 2017 ...
- Vue--项目开发之实现tabbar功能来学习单文件组件2
上一篇文章里item.vue里的span标签内容是写死了,但是我们不希望写死 所以对于五个tab选项的标题需要从外部传入,也就说 需要在item.vue里的script里写上 export defau ...
- 逆袭之旅DAY15.东软实训.Oracle.约束、序列、视图、索引、用户管理、角色
2018-07-11 08:26:00 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter表:(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系dep ...
- 用linux命令连接无线网络-转载
首先是用到的工具: ifconfigrouteiwlistiwconfig 后两个是无线工具 从现在开始,按我的步骤做 (##后面的是说明部分) 1.开启无线,如果是笔记本,开启无线开关,或用Fn+F ...
- C#中使用FFMPEG切割、合并视频。
参考网址:https://blog.csdn.net/samwang_/article/details/70332924 使用前先确保电脑已经安装了FFMPEG,并且配置好环境变量.检测是否安装配置好 ...
- bluemix部署(二)构建kubernetes工作环境
本文接上篇.在bluemix中构建kubernetes容器. 1.创建集群 左上角的三横,选容器,然后创建集群. 注意区域,免费版,给个名字,创建集群吧. 继续正在部署,这个可能要15-30分钟,真不 ...
- vue-router-8-路由组件传参
在组件中使用$route会使之与其对应路由形成高度耦合,使用props解耦 const User = { props: ['id'], template: '<div>User{{ id ...