DBASK问答集萃(2)

引言

近期我们在DBASK小程序增加了数据库 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的专题栏目和一些新的技术专家,另外,也新关联了技术闲谈、OB、架构文摘、51CTO技术栈等等数据领域的公众号,欢迎大家阅读分享。

新晋技术专家

下面是墨天轮DBASK部分新晋的技术专家。大家可以点击往期阅读《墨天轮DBASK技术专家邀请函》了解详情,申请成为我们的技术专家,加入专家团队,与我们一起创建一个开放互助的数据库技术社区。

新关联公众号

墨天轮DBASK是一个开放互助的数据库技术社区。所以,我们也新关联了技术闲谈、OB、架构文摘、51CTO技术栈等等数据领域的公众号,方便大家的阅读。如果有和数据相关的公众号,有文章转载合作的需求,可以留言联系小编哦~

问答集萃

接下来,我们分享本期整理出的问题和诊断总结,供大家参考学习,详细的诊断分析过程可以通过标题链接跳转到小程序中查看。
问题一、总结不走索引的常见情况
请问SQL什么情况下不走索引,帮忙总结一下。
诊断结论:1、谓词中出现NULL过滤条件;2、谓词中出现函数转换导致没有走索引;3、统计信息不准确;4、在WEHRE条件中like中关键字两边都有"%";5、查询条件值与列类型不一致;6、查询条件列进行数学运算;7、索引列在 IN 或者多个 OR 语句中;8、是否使用的是不可见索引等。

问题二、sid和服务名,和tns别名的区别

sid和服务名,和tns别名的区别。之间是如何区分的?

诊断结论:拿两节点RAC的情况说明下吧:db1/db2为两个节点的sid,是两个节点数据库实例的唯一名称,与instance_name参数一致分别为db1/db2;db为服务名,方便应用连接数据库,与service_name参数一致两个节点为db;tns别名为在tnsnames.ora文件中自定义的别名,应用使用此别名连接数据库,如连接字符串为db,tns别名设置为crmdb,应用连接直接使用crmdb即可,方便辨别。

问题三、oracle DG failover后更改flashback操作的并行度

我这边遇到一个问题,想改变DG在failover后主库进行的flashback操作时的并行度,就是主库执行flashback to scn xxxxxx的命令所默认的并行度。我们观察到默认是128的parallel,但是由于某些原因,我们可能需要降低并行度,请问有什么参数可以控制吗?
我在网上到处都找不到相关文章,也无法从专业书籍里找到类似的研究。

诊断结论:经测试,flashback的并行度默认受CPU_COUNT参数控制。

问题四、MySQL体系结构中一直说也有SGA和PGA,请问具体位置在哪?

MySQL 体系结构中一直说也有 SGA 和 PGA,5.7 的官方文档也没有描述,那请问是在 InnoDB 中,还是具体位置在哪?
诊断结论:一般而言,如果对应于Oracl的这两个对应概念,SGA指的是以Innodb buffer pool,innodb字典,frm缓存等公用缓存组合出来的内存区域。PGA指的是以sort buffer,binlog buffer等线程专用内存组合成的内存区域。

问题五、oracle 11g支持IPV6吗?

公司最近在做IPV6的改造方案,我想问下对现有oracle数据库会有什么影响吗?公司主要用oracle11g和oracle12c。
诊断结论:11gr2支持单节点使用ipv6,12cR1支持public IP的ipv6(内联不支持),12cR2完全支持。

问题六、move表后,表空间可用300G,但是无法resize

由于磁盘组冗余度不符合安全要求,对各表空间(Bigfile)进行清理后尝试做数据文件的resize操作,过程如下:
1、新建表空间,作为数据中转用
2、MOVE大部分表(90%)至其新建表空间后MOVE回原有表空间,从而减少数据库碎片
3、收缩对应的数据文件在MOVE回原有表空间后重建相关索引,统计发现可用空间提高40G左右,有效的减少了碎片
但是无法resize数据文件到MOVE之后的大小。
诊断结论:实际上按照你的操作思路,可以move 100%的表都去另外一个表空间,然后直接drop掉原有表空间就可以了。如果存在没MOVE表的EXTENTS已经扩展到了数据文件的边缘,是没办法resize的。

问题七、如何快速预估表的行数

请问有哪些方法可以快速预估表的行数?

诊断结论:1、并行查询count(*);2、统计信息num_rows字段;3、sample block() 取样查询。

问题八、RAC配置多个public网络

现在有一个需求,客户有两个网络,都需要连接数据库,需要配置两个public网络,请问如何配置。
诊断结论:首先官方建议不要在安装Oracle时配置多个public网络,等集群安装完之后再通过命令去添加public网络,测试步骤详见小程序文章。

问题九、关于分区表全局分区索引和全局不分区索引的效率
按月分区的分区表,单个分区表记录大约1500万,对于非分区键上的索引来说,是建全局分区索引还是不分区索引效率高?分区索引按照列HASH分区还是有其它方式?
专家解答:LOCAL索引的最大好处是在进行分区操作,比如TRUNCATE PARTITION, DROP PARTITION时,不会出现索引INVALID的情况,不影响索引的可用性。由于GLOBAL索引所有的数据存储在一起,因此当执行分区操作的时候,索引会失效,而如果想要保证所有的有效性,需要增加UPDATE (GLOBAL) INDEXES语句,这使得原本很快结束的DDL操作,由于需要维护全局索引而变得非常缓慢,且产生大量的日志。12c之后,全局索引的异步同步可以缓解全局索引的这个问题。
而GLOBAL索引的好处是,在表变为分区后,只要索引仍然是GLOBAL索引,通过索引访问数据的效率就不会下降。由于LOCAL索引的索引分区数量和表分区数量相等,如果访问一个LOCAL索引,且查询条件未指定分区键值,这时Oracle将会扫描所有的索引分区。而GLOBAL索引则只需要访问一棵索引树,当分区数量众多时,二者的效率差异是非常明显的。
当然,它们还有其他的区别。就用户而言,判断需要GLOBAL还是LOCAL索引,最主要看是否会频繁进行分区的维护操作,比如定期删除老分区,如果是的话,LOCAL是最佳选择,如果不是,则考虑GLOBAL索引。

问题十、同样的SQL,变量不同执行计划不一样

一条相似的SQL语句,变量值不同,执行计划不同。SQL如下:

select order_no from OWNER.TAB_NAME where pa_id = '10221178' and ORDER_TIME > SYSDATE - 120;(异常)select order_no from OWNER.TAB_NAME where pa_id = '10221178' and ORDER_TIME > SYSDATE - 150

诊断结论:120的trc文件可以看到成本最低的是bit map and的执行路径,120的trc文件可以看到成本最低的是bit map and的执行路径。至于为什么两个执行计划不一样,应该和IDX_XXX索引选择率变化导致bit map的成本增加有关。

问题十一、oralce 11g RAC 系统时间同步问题
oralce 11g RAC 系统时间慢慢的就比正常时间慢了,如何解决呢,rac节点之间时间是同步的,但是比实际时间慢出30分钟,这个问题如何避免呢,rac本身自带了时间同步的服务,还可以在外面再加ntp服务吗?
诊断结论:一般都是在两节点开启NTP服务,同步外部NTP服务器的时间,实践中都是配置NTP服务。如果启用NTP服务,集群自己的ctss服务会停止,没有影响。如果需要启用NTP,特殊情况下可能会导致节点重启,保险起见,可以到下次停机窗口一起变更。

你可能感兴趣的:(oracle,sql,postgresql)