最近的几个技术问题总结和答疑(九)

    最近的琐事比较多,而提问题的朋友还是不少,很多消息都没有来得及回复,各种事情一堆起来,不少问题想起来已经过了好几天了,所以还是来整理一篇技术问答为好。
    首先是很多朋友问我关于半自动化搭建Data Guard的脚本,我写了几篇文章来介绍思路,自己也提了不少的改进,团队内部也沟通过了,一直迟迟没有发布出来是因为我觉得目前的实现方式可能对于我的工作能够极大提高,但是很多朋友使用的环境可能没有中控的概念,所以不是很通用,所以我想做一些改变,还有一个是里面的有些逻辑我想改改,至少简化一下。但是一直是思想的潜行者,行动的矮子,这件事情拖了不少日子。真是惭愧,我力争下周末前分享出来,然后附上简单的使用说明。
    最近开始实践时间管理,所以对于微信上的事情花的精力就少了很多,这样可以让我更加专注,可能隔一段时间我会看看聊天记录。不知不觉,又堆积了快一百条未读消息,目前我使用的时间管理工具是日事清,至少这个工具能够手机端,电脑端都可以同步,这个完全符合我的习惯,使用起来还不错,其实越是指定详细的计划,越是发现自己很多东西都需要学习,都需要改进。看来分得了轻重缓急,而且能够实践到位是一件很不容易的事情。我发现很多时候都会有急于求成的心态,所以任务栏上的有些东西突然加上去了,而有些计划内的东西就耽搁了,长此以往会逐步有拖延的现象,这个一定要引以为戒。
    然后来解答几个技术问题。
    今天在微信群中看到叶老师提问关于得到DB time的曲线图,其实要得到这样的图形,有两种思路,一种就是得到实时的数据,这个就需要指定频度来抓取状态数据,比如抓取实时DB time,根据这些状态点信息得到一个完整的曲线图,这个在Zabbix监控体系中是没有问题的,而且基于Oracle的监控可以使用Orabbix,要查看按天,按周,按月的曲线图,这个在Zatree里面是完全支持的,目前我们也这么用;而另外一种思路就是基于快照,这个得到的数据频度可能是半小时或者一小时,状态略粗一些,我下午整理了一个shell脚本,感兴趣百度网盘可以查看 https://pan.baidu.com/s/1nvCnl1J
    而自我上次发了一篇关于执行计划直方图的文章一来,还是有几个朋友对这方面很关注,提了不少的建议。有些朋友问那个15个字符是什么意思,没看明白,我做个小测试来说明。
创建一个测试表。
>  create table test_stats (order_id varchar2(64),user_id varchar2(64),channel_id number);
Table created.

> insert into test_stats values('0000000000001241414','test',1);
1 row created.

> insert into test_stats values('0000000000001251414','test2',2);
1 row created.

> insert into test_stats values('0000000000001251514','test3',2);
1 row created.

> commit;
Commit complete.

如果想看更多细节,可以开启10046事件。
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'
收集统计信息
exec dbms_stats.gather_table_stats(tabname => 'test_stats',ownname => 'N1',method_opt => 'FOR ALL COLUMNS SIZE AUTO');
ALTER SESSION SET EVENTS '10046 trace name context off'
收集统计信息使用了auto选项呢,可以看到,都没有生成直方图信息。
SELECT COLUMN_NAME, NUM_DISTINCT, NUM_BUCKETS, HISTOGRAM
FROM   USER_TAB_COL_STATISTICS
WHERE  TABLE_NAME = 'TEST_STATS' AND COLUMN_NAME IN ('ORDER_ID','USER_ID') ;
COLUMN_NAME             NUM_DISTINCT NUM_BUCKETS HISTOGRAM
---------------------- ------------ ----------- ------------------------------
ORDER_ID                       3           1 NONE
USER_ID                         3           1 NONE

但是实际上查看数据字典可以看到还是依旧存在两个默认的bucket.
select to_char(endpoint_value) value,endpoint_number,column_name from dba_tab_histograms where table_name = 'TEST_STATS' and column_name in ('ORDER_ID','USER_ID') ORDER BY endpoint_number;
VALUE                                    ENDPOINT_NUMBER COLUMN_NAME
---------------------------------------- --------------- --------------------
250207622735984000000000000000000000                   0 ORDER_ID
604364106098959000000000000000000000                   0 USER_ID
250207622735984000000000000000000000                   1 ORDER_ID
604364106160614000000000000000000000                   1 USER_ID
这个值是怎么算出来的。
首先对字段order_id的max值做一个dump
SQL> select to_char(substrb(dump(max("ORDER_ID"),16,0,32),1,120))  from "N1"."TEST_STATS" t ;
TO_CHAR(SUBSTRB(DUMP(MAX("ORDER_ID"),16,0,32),1,120))
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Typ=1 Len=19: 30,30,30,30,30,30,30,30,30,30,30,30,31,32,35,31,35,31,34
然后取前30位,转为十六进制,得到的是2502开始的一长串数字。
SQL> select to_number('303030303030303030303030313235','xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') aa from dual;
                                                           AA
-------------------------------------------------------------
                         250207622735984164311304858405777973
而得到的这一长串数字的前15位是什么呢?                      
SQL>  select substr('250207622735984164311304858405777973',1,15) from dual;
SUBSTR('2502076227359841643113
------------------------------
250207622735984
我们这个时候来看看直方图数据字典的信息。可以看到value是250207622735984000000000000000000000,前面的15位就是我们计算得到的这个数字。
select to_char(endpoint_value) value,endpoint_number,column_name from
dba_tab_histograms where table_name = 'TEST_STATS' and column_name in
('ORDER_ID') ORDER BY endpoint_number;
VALUE                                    ENDPOINT_NUMBER COLUMN_NAME
---------------------------------------- --------------- --------------------
250207622735984000000000000000000000                   0 ORDER_ID
250207622735984000000000000000000000                   1 ORDER_ID
而如果我们重新收集统计信息,指定bucket为20
exec dbms_stats.gather_table_stats(tabname => 'test_stats',ownname => 'N1',method_opt => 'FOR  COLUMNS SIZE 20  ORDER_ID');
然后再次查看,其实这个时候只生成了3个,因为我只插入了3行数据,样本太少,但是查看value值是一样的,这样也就很难有所差别,其实也算是丢失了一些精度导致。
SQL>  select to_char(endpoint_value) value,endpoint_number,column_name,ENDPOINT_ACTUAL_VALUE from dba_tab_histograms where table_name = 'TEST_STATS' and column_name in ('ORDER_ID') ORDER BY endpoint_number;

VALUE                                    ENDPOINT_NUMBER COLUMN_NAME          ENDPOINT_ACTUAL_VALUE
---------------------------------------- --------------- -------------------- ----------------------------------------
250207622735984000000000000000000000                   1 ORDER_ID             0000000000001241414
250207622735984000000000000000000000                   2 ORDER_ID             0000000000001251414
250207622735984000000000000000000000                   3 ORDER_ID             0000000000001251514

    

时间: 2024-10-31 11:11:52

最近的几个技术问题总结和答疑(九)的相关文章

技术人员值得关注的九家Hadoop技术企业

文章讲的是技术人员值得关注的九家Hadoop技术企业,如果大家手中握有大量数据,那么接下来要做的就是选择一款理想的Hadoop发行版了. 作为曾经仅仅为谷歌及雅虎等互联网帝国服务的旧日稀罕儿,如今这款大数据管理系统已经积累起极高的知名度与平民人气.并开始逐步走入寻常企业环境.促成这一现状的原因有二:其一.企业需要管理的数据规模愈发庞大,而Hadoop正是完成这项任务的绝佳平台--特别是在传统陈旧数据与新型非结构化数据交相混杂的情况下;其二.已经有众多供应商加入到Hadoop相关支持与服务项目的开

WCF技术剖析之二十九:换种不同的方式调用WCF服务[提供源代码下载]

我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置:通过ChannelFactory<TChannel>创建服务代理对象.在这篇文章中,我们采用一种独特的方式进行服务的调用.从本质上讲,我们只要能够创建于服务端相匹配的终结点,就能够实现正常的服务调用.在WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务的元数据,而利用MetadataImporter将获取的元数据导入成Serv

最近的几个技术问题总结和答疑(七)

今天抽空整理,发现近期问我数据恢复,灾备的问题还比较多,我简单整理了一下. 问题1: 能请教一个问题么?我们用was链接的oracle数据库,是不是不建议在was上设置statementcachesize的参数?我们目前设置的是200,发现数据库中那个session都会持有200个游标,有工程师建议把这个参数设置为0 这个问题着实还问到我了,不过我问了下专业的中间件工程师,答复如下: Statement Cache Size是指有多少个prepared statement或者callable s

最近的几个技术问题总结和答疑(八)

今天的技术问答是刘晨兄的一个问题,提问来自于我新书中的一个实验,刘晨兄非常认真,对我书中的很多细节都进行了测试. 看到这个错误,如果出现end-of-file这类的错误信息,基本可以断定数据库实例是宕了. 找到刘晨兄提到的页码标示,原来和我书中的测试结果有一些差别. 我书中的结果类似这样的形式: 错误代码也完全不同,这个问题该怎么解释呢,这个应该是一个很细节的问题. 首先网络上关于这个错误有很多种说法,很多我不认同. 我们先来复现一下问题,找了一套11.2.0.3的环境测试了一下. 先初始化数据

WCF技术剖析之二十九:换种不同的方式调用WCF服务

我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置:通过ChannelFactory<TChannel>创建服务代理对象.在这篇文章中,我们采用一种独特的方式进行服务的调用.从本质上讲,我们只要能够创建于服务端相匹配的终结点,就能够实现正常的服务调用.在WCF客户端元数据架构体系中,利用MetadataExchangeClient可以获取服务的元数据,而利用MetadataImporter将获取的元数据导入成Serv

技术人员谈管理之九大项目管理记忆口诀

九大管理: 狗子整范进,成人风采 沟通,质量,整体,范围,进度,成本,人力资源,风险,采购 整体管理: 成书计划,指管执行,监控整变,项目收尾 1.项目启动(项目章程) 2.编制项目范围说明书 3.制定项目管理计划 4.指导和管理项目执行 5.监督和控制项目 6.整体变更控制 7.项目收尾 范围管理: 范管定义工分,范围确认控制 1.编制范围管理计划 2.范围定义 3.创建工作分解结构 4.范围确认 5.范围控制 进度管理 活动序资源,历时划控制 1.活动定义 2.活动排序 3.活动资源估算 4

【阿里在线技术峰会】罗龙九:云数据库十大经典案例分析

本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的<云数据库十大经典案例分析>的分享整理而成.罗龙九以MySQL数据库为例,分析了自RDS成立至今,用户在使用RDS过程中最常见的问题,包括:索引.SQL优化.锁.延迟.参数优化.连接数.CPU.Iops.磁盘.内存等.罗龙九通过对十大经典案例的总结,还原问题原貌,给出分析问题的思路,旨在帮助用户在使用RDS的路上少一些弯路,多一些从容. 直播视频 (点击图片查看视频) 幻灯片下载:点此进入 以下为整理内容. 案例一:索引 今天之所以将索

最近的几个技术问题总结和答疑(二)

最近积累了几个问题,我就凑在一起做一个统一的答复,微信后台的留言回复超过24小时就无法回复了,有时候看到的时候已经过了时间点了,实在抱歉. 有时候有些朋友是通过qq或者微信来问我问题,有时候运气好能够马上定位,感觉非常侥幸. 今天回答5个小问题. 第一个问题是在昨天晚上准备睡觉前,一个微信好友的提问.说自己的DG备库上启动了两个一模一样的实例,感觉比较奇怪. 当时的截图如下. 一看这个问题,真是运气好,马上就知道原委了,我让他把当前环境变量的ORACLE_HOME提供给我. 然后找到两个PMON

最近的几个技术问题总结和答疑(五)

最近收到了几个朋友的提问,我简单总结了一下.问题1: 首先是有个朋友问到,单引号,双引号在有些场合通用,有些场合会提示错误. 我做了一个简单的测试,当然只是一个相对片面的解读,能够说明问题即可. 比如我需要修改SYS的密码为asdfasg!,需要注意末尾有一个感叹号. 可以看到下面的测试结果. SQL> alter user sys identified by 'asdfasga!'; alter user sys identified by 'asdfasga!'