分类目录归档:Exadata

Exadata上网卡参数的优化(主要是IB的MTU不同于一般值)

对比了一下普通主机和Exadata,发现主要的区别在于组播的配置,这个跟Exadata上使用IB的整个网络环境有关系(Infiniband card,IB Switch等等): MTU是Maximum Transmission Unit的缩写。意思是网络上传送的最大数据包。 最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等),MTU也不是越大越好,因为MTU越大,传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。因此,需要针对网络來进行最佳化。 MTU的单位是字节。一般来说,如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。 把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。 一般普通的机器缺省配置组播是缺省值1500,这个跟以太网的帧的设计有关系。 以前,Ethernet一般把数据分割为一定大小的帧(frame)的单位来进行传送接收,但在规格上帧的尺寸被定为1,518字节。 但是随着通讯器材的发展,现在的万兆网等都支持大帧(jumbo frames),帧的尺寸根据机器各种各样,大部分对应9,000~16,000字节左右。 . . 要修改MTU的方法很简单(尽管很多人在RAC环境不正确的修改这个值导致了很多问题): ifconfig eth0 mtu xxxx(你需要设置的值),比如: ifconfig eth0 mtu 9000 修改后,使用 netstat -i 或者ifconfig |grep MTU来查看既可以。 目前,Oracle支持在私有网络(interconnect)使用超过1500的组播(具体设置也要根据前面说的,看环境,不是越大越好。通常没有好的设计,一般不改)。 . . 对于多播(MULTICAST),RAC要求必须开启,这个在Oracle官方的最佳实践中有明确说明: 对于多播的检测,Oracle也提供了详细的方法: 类似下面的,就是多播检测失败的情况: . 关于组播,在普通环境(非Exadata)有一些注意事项: 1,一般就采用缺省的1500,如果超过这个值,需要特殊的配置,具体请参考: … 继续阅读

发表在 体系架构 | 标签为 , , | 留下评论

解决Exadata上IB检查脚本infinicheck的报错过程

今天检查Exadata的IB网络时,使用 infinicheck 检查,发现db节点有报错,cell节点正常。 当前主机是Exadata X5-2: infinicheck的执行结果(该命令可以有很丰富的参数,但是也可以不带任何参数,缺省就可以): 从这里我们看到,凡是到db节点的都报错。 infinicheck命令底层是调用的rds-stress命令,例如: rds-stress -r 192.168.10.1 -p 10584 当然,除了infinicheck意外,还有其他很多检查方法,比如rds-ping(ExaWatcher和OSWatcher中调用的这个命令)。 很奇怪,为什么就db节点报错? 于是,使用infinicheck 带参数-b -g 来检查和配置一下DB节点的IB的SSH连通性: 这里我犯了个错误:这个命令需要配置IB的基于IP的SSH(root),而不是主机名 这里很清晰的告诉我们,ping不通,O(∩_∩)O哈哈~,这个就好办了。 接下来,我们手工ping看看: 那么ping第2个节点的主机名试试看,证实一下是不是解析的问题: 这里我们看到,果然是解析的问题。 由于IB网络是Exadata内部互联用的,因此没有在DNS解析,只在/etc/hosts中解析。 而/etc/hosts文件是由onecommand配置的(除非手工安装,否则使用了onecommand后,所有配置文件都由onecommand根据配置xml文件自动生成) 从这里我们看到,IB网络的IP配置格式是错误的,正确的是: 127.0.0.1 localhost.localdomain localhost 错误的是: 192.168.10.1 dm01db01-priv1.lunar.com dm01db01-priv1 修改了上述hosts文件后, 纠正hosts文件后,发现ping主机名的问题解决了: 这里还有个问题很奇怪,cell节点的hosts文件也是错误的,但是却可以ping通,怀疑跟DNS缓存有关系: 现在,再次使用infinicheck 带参数-b -g … 继续阅读

发表在 故障诊断 | 标签为 , | 留下评论

Exadata X5 软件和硬件的新特性概览

Exadata X5的新特性,很有意思,软硬件都有很多改变,个人感觉最突出的硬件改变是X5只有两种磁盘配置: 1,全闪配置(EF) 2,SSD(Flash F160 NVMe PCIe card with 1.6 TB)+4T(HC DISK) 然后就是内存增加,CPU升级等等。。。 下面的信息来源于强大的MOS: Oracle Exadata Database Machine X5-2 Support ……New Exadata X5-2 Database Server . Exadata X5-2 updates the 2-socket database servers to use the latest and fastest Intel … 继续阅读

发表在 性能指标 | 标签为 | 留下评论

根据块号查看块内数据和修改时间的例子(普通表和压缩表)

今天微信群里有个朋友问起一个问题,顺手做了个测试。 问题是这样的: 1,怎么根据file# block#来判断这个block中有多少数据? 2,启用了高级压缩后,如何查看? 3,怎么判断这些数据插入的时间? 4,不适用dump block的形式,可以怎么观察? 最后一个问题不用测试了,不用dump的话,可以使用类似bbed等一堆工具,还可以使用event 10046跟踪来观察。 本次始终压缩相关的脚本可以参考blog: Exadata上的HCC测试(EHCC)——1 Exadata上的HCC测试(EHCC)—2—:DBMS_COMPRESSION.GET_COMPRESSION_RATIO Exadata上的HCC测试(EHCC)—3—分区表的压缩 关于HCC压缩的块结构参见: Exadata上HCC表的数据块结构—1-非压缩数据块结构 Exadata上HCC表的数据块结构—2-BASIC Compress和OLTP Compress Exadata上HCC表的数据块结构—3-HCC块(compress for query low) 前三个问题,一次测试如下: 因为朋友问到ASM的情况,这个需求实际上跟是否使用ASM无关,是ORACLE DB的原理,测试环境如下: 随便找一个block,或者指定一个block都可以: 查看这个block中有多少条数据: 这里看到,目前这个block中存储了88行记录。 查看这88行数据是什么时间插入的,以及他们的ROWID: 这里看到有88行,跟前面的结果是一致的。 看看这个表中有多少个block,以及他们的块号: 因为要测试压缩,那么先看看现在该表的压缩状态,这里我的LUNAR表是没有压缩的: 这里的查询方法,参考: 现在启用压缩(HCC只能在exadata上,否则会报错): 再次查询,可以看到,已经是高级压缩了: 这里可以看到,rowid已经改变了,这是因为块的存储格式已经变化了: 看下现在这个LUNAR表使用了哪些block: 这里看到比刚才已经减少了17-12=5个block。 查询每个block中的记录数: … 继续阅读

发表在 Internal, 内部机制 | 标签为 , | 一条评论

oracle数据块如何定位到ASM中?在exadata定位block的思路是什么?

前几天有个朋友提出一个“老问题”,数据库上的block能否对应到EXADATA的block上,我答应做个demo,一直没时间,今天闲了,玩了一下: 对于EXADATA来说,这个需求设计两个问题: 1,数据库的block如何对应到asm中 2,exadata上的block如何对应到cell上的物理盘(griddisk,celldisk都是逻辑概念) 首先创建测试表: create table lunartest as select * from dba_users; –查找里面用户名为LUNAR的ROWID: 记录一下这个表的username=’LUNAR’的数据的rowid,便于验证数据。 然后找到该表的第一个block,也就是segment header,方法至少有3种 1,通过dbms_rowid 2,通过dba_extents 3,通过dba_segments 这里我们随便选一种,找到了该block的位置: 查看当前ASM的AU尺寸和BLOCK尺寸(通常是缺省的,不排除特殊客户自己设定的或者exadata的情况,因此还是找一下): exadata上使用KEFED的例子可以参考《Exadata上验证ASM磁盘头备份的位置》 我的数据库为8k的数据块(db_block_size),那么计算一下对应到ASM是哪一个extent: lunartest表在DATA DG的asm file 1755上: 如果是exadata,那么输出类似下面的,这里并没有本质区别(区别在通信方式上,后面会讲……): 根据上面的计算,查找这个表的第一个数据块在哪一个ASM的diskgroup,disk和AU的信息: 如果是exadata环境,那么查询到的信息,对应到这里的/dev/lunarlun02可能就是类似下面的:o/192.168.10.3/DATA_DM01_CD_00_dm01cel01: 这里也就对应到cell01(IP为:192.168.10.3) 具体例子可以参考:Exadata更换硬盘的操作过程和解释 使用dd 我们用dd验证一下数据,: 验证数据:这个LUNARTEST是根据DBA_USERS做的CTAS,因此上面我们有一行测试数据,这里可以找到: 因为是别人的生产库,不能使用bbed等工具瞎折腾,因此,我这里使用UltraEdit查看这个块来验证数据: 可以看到数据是吻合的。至此,上面将oracle的block对应到ASM是没问题的。 另外,如果要想观察asm的具体操作,还可以使用strace,比如 read64(15, … 继续阅读

发表在 ASM, 内部机制 | 标签为 , , | 留下评论

exadata巡检报告的模板

最近有几个兄弟要exadata巡检报告的模板,完善了一下,大概200页左右: 由于里面有大量客户的资料,因此暂时设置为需要口令下载的,有需要的兄弟直接联系我 后续如果有机会,将不断更新,加入新的内容,O(∩_∩)O哈哈~ 不过现在没有环境了,有需要的可以跟我联系,我免费检查,这样一举两得,我完善了自己的知识库,朋友们可以完成工作任务,O(∩_∩)O哈哈~ Exadata_HealthCheck_模板下载地址: Exadata_HealthCheck_模板

发表在 日常运维 | 标签为 , , | 10 条评论

Exadata上,ASM的Req_mir_free_MB 是如何得到的?

Exadata上,ASM的Req_mir_free_MB 是如何得到的? 首先,我们都知道,可通过v$asm_diskgroup来查看required_mirror_free_mb: 这里看到,实际上lsdg的输出跟v$asm_diskgroup是一致的(注意,早起的数据库版本由于rebalance时的bug,可能造成显示不一致,例如 Bug 7699985) 由于Exadata上,没有外部冗余,数据完全通过ASM镜像,那么就要考虑当磁盘故障或者cell故障时的数据保护,需要相应的根据Normal Redundancy或者High Redundancy来考虑分别两种情况: 1,在Normal Redundancy时,要考虑1块磁盘损坏或者1个cell不能启动时,如果修复时间超过缺省的3.6小时,需要使用现有系统中可用磁盘空间做Rebalance 2,在HighRedundancy时,要考虑2块磁盘损坏或者2个cell不能启动时,如果修复时间超过缺省的3.6小时,需要使用现有系统中可用磁盘空间做Rebalance Oracle根据内部算法,使用一个调解因子做系数,比如,不同版本的Oracle,评估方法不同: 如果数据库是11.2.0.3或者11.2.0.4,那么这个调解因子为1.10,如果是低于这个版本的数据库,调解因子是1.5(具体该因子的算法尚未知道) 对于每一个磁盘组,他们需要调解的空间大小(即,预留空间)=v$asm_diskgroup.required_mirror_free_mb * 调解因子 然后根据不同的镜像(Normal或者High),以及不同的Exadata配置(1/8,1/4、1/2,满配)再分别乘以一个系数,下面的代码根据每个磁盘组的最大的failgroup的大小来确定需要保留的空间: 然后,计算出来总共的需要“预留的空间”按照不同配置的Exadata乘以一个比例,就是我们这看到的 REQUIRED_MIRROR_FREE_MB: 对于Normal Redundancy: 对于High Redundancy: 完整的代码可在这里下载

发表在 ASM, FAQ, 内部机制 | 标签为 , , | 留下评论

Exadata和非Exadata平台上,ASM的可用空间如何计算?

曾经很多次,有客户问到ASM上可用的空闲空间问题,实际上,由于ASM带有3中冗余设置方式,分别应对不同场景的数据冗余情况,因此,通常在Exadata上的选择和非Exadata上的选择是不同的。 . 在非Exadata的环境中,通常我们会使用RAID,比如RAID10,因此ASM中使用External Redundancy,例如: ASMCMD> lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 4096 1048576 51200 45862 0 45862 0 N CFARCH1/ MOUNTED EXTERN N 512 4096 1048576 51200 47653 … 继续阅读

发表在 ASM, FAQ, 内部机制 | 标签为 , , | 2 条评论

我在Oracle的第二个ppt——Exadata运维交流

在Oracle工作8年了,这是第二个ppt,最满意的我学会了修改ppt模板,O(∩_∩)O哈哈~ 本次交流的主要能容源于本网站,主要是跟同事一起交流Exadata运维中的常见问题,以及如何更好的为客户做好Exadata的相关服务。 Exadata运维交流

发表在 日常运维 | 2 条评论

Exadata上的进程-Diskmon进程

Master Diskmon是Oracle Clusterware 11.1.0.7版本引入的一个新的进程(主要是为了Exadata Storage Server软件而设计的),该进程作为缺省安装的一部分随着Oracle Clusterware的安装就存在了。 Master Diskmon主要负责监控cell,并负责跟数据库节点的diskmon进程通信。该进程还参与IO fencing机制和IORM(IO Resource Manager)。 Master Diskmon进程是一个单独的进程,他跟ocssd进程通信,即便是非Exadata环境,该进程也是存在的(只是非Exadata环境,Diskmon进程没有什么作用,后面会解释这个)。 在11.1.0.7中,/bin/sh /etc/init.d/init.cssd 会启动2个diskmon相关进程,即: root 1717 0.0 0.0 6716 1368 ? Ss 11:43 0:07 /bin/sh /etc/init.d/init.cssd fatal <span>root 2799 0.0 0.0 6720 1364 ? S 11:44 0:00 … 继续阅读

发表在 FAQ | 标签为 , | 留下评论