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

简介:     最近的琐事比较多,而提问题的朋友还是不少,很多消息都没有来得及回复,各种事情一堆起来,不少问题想起来已经过了好几天了,所以还是来整理一篇技术问答为好。     首先是很多朋友问我关于半自动化搭建Data Guard的脚本,我写了几篇文章来介绍思路,自己也提了不少的改进,团队内部也沟通过了,一直迟迟没有发布出来是因为我觉得目前的实现方式可能对于我的工作能够极大提高,但是很多朋友使用的环境可能没有中控的概念,所以不是很通用,所以我想做一些改变,还有一个是里面的有些逻辑我想改改,至少简化一下。
    最近的琐事比较多,而提问题的朋友还是不少,很多消息都没有来得及回复,各种事情一堆起来,不少问题想起来已经过了好几天了,所以还是来整理一篇技术问答为好。
    首先是很多朋友问我关于半自动化搭建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



    

目录
相关文章
|
存储 人工智能 缓存
空间复杂度介绍
空间复杂度介绍
317 0
|
1月前
|
存储 弹性计算 Linux
阿里云服务器从零到精通的购买指南,云服务器购买流程及注意事项参考
对于许多初次接触阿里云服务器的用户而言,如何选择云服务器配置以及在选购过程中有哪些注意事项,是新手用户比较关心的问题。本文为大家展示阿里云服务器选购的完整指南,涵盖了通过云服务器ECS产品页下单的详细步骤,以及通过阿里云的活动选购价格比较实惠的云服务器。重点是介绍每一步的注意事项,以供初次选购阿里云服务器的个人开发者和企业用户参考,尽量一次选购好,避免出现买错从新买的情况出现。
|
传感器 机器学习/深度学习 数据采集
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
|
4月前
|
存储 人工智能 搜索推荐
使用 CodeBuddy 实现视频合并工具:解决本地视频处理痛点
本地视频合并工具在应对存储空间、网络环境、软件安装和隐私安全等痛点上具有显著优势。而 CodeBuddy 凭借其强大的编程能力,为高效开发功能丰富、个性化的本地视频合并工具提供了可靠途径,让视频合并变得更加简单、便捷、安全。 还没有入手的同学赶紧去试试吧
140 6
使用 CodeBuddy 实现视频合并工具:解决本地视频处理痛点
|
6月前
|
机器学习/深度学习 人工智能 算法
AI浪潮下的青年觉醒:生成式人工智能(GAI)认证赋能未来竞争力与人文担当
人工智能正深刻改变生活与工作,青年面临前所未有的机遇与挑战。文章探讨了青年在AI时代的觉醒、核心竞争力的培养及技术伦理参与的重要性,并强调生成式人工智能(GAI)认证的意义,助力青年提升技能与就业竞争力,推动科学教育与技术创新融合。青年应保持好奇心、坚持人文关怀,引领未来社会发展方向,在AI浪潮中创造价值与美好未来。
|
存储 人工智能 运维
正式收官!阿里云函数计算携手优酷,用 AI 重塑影视 IP 创新边界
近日,阿里云联合优酷发起的 Create@影视 IP x AI 应用创新大赛,将网剧《少年白马醉春风》这一热门影视 IP 与阿里云 AI 技术相结合,由阿里云函数计算提供 AIGC 技术支持参赛者基于网剧《少年白马醉春风》IP 或“少年江湖”精神内核,用 AI 生成角色场景设计、手办设计、破次元合照、数字人等多样化的作品。
294 12
|
6月前
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
729 8
|
算法 数据安全/隐私保护 开发者
Matlab exe管理软件
Matlab 强混淆源代码,加密p文件,管理授权用户,生成唯一机器码、联网校验许可、限制使用次数等众多功能......
Matlab exe管理软件
|
存储 关系型数据库 MySQL
MySQL索引设计原则与优化策略
MySQL索引设计原则与优化策略
|
文字识别
使用ModelScope社区搭建表格OCR应用
使用ModelScope社区搭建表格OCR应用

热门文章

最新文章