2012年8月1前言1.1本文背景前期东软-甲骨文公司组织了一次针对社保系统的Exadata联合应用测试,本文内容是本次Exadata测试的经验总结,其中包含了与Oracle技术人员交流经验应用、Oracle相关技术文档应用及个人测试经验总结。
1.2本文简介本文是关于ORACLEExadata的一些特性介绍和应用Exadata的一些指南;本文不会涉及太多传统ORACLEDataBase已经具有的而非Exadata专有的一些特性介绍。
通过本文,读者可以了解ORACLE推出Exadata的目的和初衷,简单了解Exadata架构体系,了解Exdata的一些设计思路,了解其特性及其原理;了解Exadata的适合应用场景,不适合应用场景,以及在Exadata下开发的一些注意事项(尤其是做Exadata项目主要设计、开发人员一定要了解Exadata,不要把它完全当作传统ORACLE数据库)。
1.3读者范围●已经熟悉ORACLE数据库●有Exadata相关项目●想了解一些Exadata的特性原理和其实现细节一 Exadata概述1Exadata简介1.1ORACLEExadataDatabaseMachine1.ORACLEExadata数据库云服务器,把服务器、存储、数据库合理的整合在一起。
2.为满足大型数据库存在的性能瓶颈而推出的,最初为DW系统应用,后来也同时支持OLTP系统,成为一个支持混合应用的系统。
3.包含DatabaseServer、ExadataStorageServer2Exadata的配置及性能参数2.1性能优势1.是ShareNothing(StorageServer)与ShareDisk(DataBaseServer)结合的系统,有优点也有缺点。
2.是软硬件结合的系统,也是一个Balance系统,通过多CPU、大内存、多磁盘、Flashcard、Infiniband等合理搭配,再结合强大的软件系统,减少单一性能瓶颈;其主要是软件提升系统性能,而不是主要靠硬件。
其性能好最主要原因是通过Offload(存储节点卸载)减少存储层与数据库层之间的传输数据量。
3.对于要求吞吐量批处理业务操作来说,通过Offload(如cellSmartfilecreation、SmartScan、StorageIndex等技术)方式减少无用数据的交互,通过Compression使数据存储空间更小,通过DirectPathRead 数据直接放到PGA中,而不占用SGA。
4.对于要求响应速度的单笔并发查询业务来说,通过FlashCache提供更大的IOPS。
FlashCache同时也为大查询提供更高的带宽。
5.通过Infiniband使数据传输带宽更高,也降低RAC间争用。
6.通过ASM打散数据,避免热点IO。
7.再通过ResourceManager协调管理各个业务系统可使用的资源。
8.再加上Database11gR2的分区、并行、并发、ResultCache等增加系统处理性能和能力。
二 Exadata特性1SmartScan(智能扫描)1.1SmartScan带来什么1.感性认识1.2SmartScan介绍1.SmartScan是什么1)其设计思路区别以往系统,将处理能力从DB层下移到Storage层2)SmartScan在Storage层由软件实现2.SmartScan作用1)过滤无用数据,减少提交到数据库服务器的数据量2)即减少对网络及DB服务器压力减小,利用了存储的CPU资源3.SmartScan原理1)字段过滤:selectcolumn2)谓词过滤:wherecolumn\joincolumn4.SQL启用SmartScan必要条件(非充分条件)1)必须是全扫描(1)FullTableScan(2)IndexFastFullScan(3)BitmapScan2)必须直接路径读取(DirectPathRead到PGA,普通方式读取到SGA不可以)3)对象必须存储在ExadataStorage上(其他普通存储不可以)5.ORACLE提供参数禁用或启用SmartScan(默认启用)1.3SmartScan特点1.自动和透明,随时可以使用,不需要特殊处理1)SQL第一次执行就可以使用2)不像StorageIndex那样需要ORACLE先建立才能使用3)不像FlashCache那样需要ORACLE先缓存4)Where子句也不是必须的2.使用特点1)只适用于Query,不适用于DML2)按普通索引查询则无法使用SmartScan3)没有类似BufferCache共享的目的,非常适合每次查询都是不重复的数据。
4)只返回符合条件的row和column,多余数据不返回5)数据按照集合(非ORACLE块)返回到PGA中,不放入SGA6)如果所有字段都查,并且没有where子句,那么SmartScan就无作用了1.4SmartScan应用SQL>set autot onSQL>select/*+no_index(t)*/count(1)from ac42t where aac001=;COUNT(1)----------28已用时间:00:00:09.80执行计划----------------------------------------------------------Planhashvalue:-----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-----------------------------------------------------------------------------------|0|SELECTSTATEMENT||1|7|1558K(1)|05:11:37||1|SORTAGGREGATE||1|7||||*2|TABLEACCESSSTORAGEFULL|AC42|17|119|1558K(1)|05:11:37|-----------------------------------------------------------------------------------PredicateInformation(identifiedby operation id):---------------------------------------------------2-storage("AAC001"=)filter("AAC001"=)Note------automatic DOP:skippedbecause of IOcalibrate statistics aremissing统计信息----------------------------------------------------------1recursivecalls0db block gets6122224consistent gets6122176physicalreads0redo size347bytessentvia SQL*Net to client360bytesreceivedvia SQL*Net from client2SQL*Netroundtrips to/from client0sorts(memory)0sorts(disk)1rows processedSQL>set autot offSQL>select*from v_flash;NAMEVALUE--------------------------------------------------------------------------cellflash cacheread hits292cell num smartIO sessionsusing passthru mode due to cellsrv0cell num smartIO sessionsusing passthru mode due touser0cell physical IObyteseligible for predicateoffload5.0153E+10cell physical IObytessaved bystorageindex0cell physical IOinterconnectbytesreturned by smart scan7285736db block gets185db block gets direct0db block gets fromcache185db block gets fromcache(fastpath)8physicalread IOrequests288282physicalread requestsoptimized292已选择12行。
已用时间:00:00:00.061.5SmartScan总结1.SmartScan性能1)性能很快,一般在秒级/10、秒级、分钟级2)比普通全表扫描快很多3)没有中等性能的传统Index快,没有中等性能的StorageIndex快,和不好的Index/StorageIndex差不多4)结合StorageIndex使用,性能更好2.根据其机制和测试结果,个人感觉:1)为DW而设计,更适用于类似DW系统等大数据量应用。
2)不太适用于要求响应时间和并发量的OLTP单笔业务系统中。
3.SmartScan适用场景1)适用于后台手工大数据查询(1)如现场后台手工分析、统计一些数据2)报表统计(1)各类大报表的统计3)前台各类大查询(1)大数据量的查询4)前台大业务模块的待处理数据的查询(1)批量核定业务的未核定单位(个人)数据查询(2)批量征集业务的待征集数据查询(3)批量实收业务的到帐未实收数据查询5)Where条件选择性非常不好的各种查询(1)(日期、类别、状态、人数、金额。
)6)非常不常用、不重要的OLTP单笔业务4.SmartScan不适用场景1)后台批量业务的循环大SQL单次查询(1)不能在forloop中的SQL使用SmartScan2)前台并发大的小业务(1)对于前台并发操作多,但很小的业务,如停续保、基本信息修改等5.SmartScan给系统设计开发带来的好处1)对OLTP小业务无影响(不必考虑此特性,按原先方式设计开发)2)减少大SQL过度优化3)对于复杂大SQL直接用SmartScan,不用非要走各种索引4)减少选择性非常不好的传统索引的建立2StorageIndex(存储索引)2.1StorageIndex带来什么1.感性认识2.2StorageIndex介绍1.StorageIndex是什么1)不同于传统Index,非find需要的数据,而是filter不要的数据2)在Storage层实现,非Server层3)StorageIndex保存在cell节点内存中4)StorageIndex为每个存储单元(1m)数据块建立最大值和最小值2.StorageIndex作用1)消除不必要的磁盘I/O3.StorageIndex原理1)比较where条件与cell内存中的StorageIndex,不符合匹配条件的存储区间直接被跳过,由于被跳过部分数据不产生IO,因此大大减少磁盘I/O2)类似Partition,不过是更小范围的分区4.StorageIndex如何管理1)StorageIndex由ORACLE内部来自动维护(包括建立、更新、清除等)(1)第一次智能扫描(2)Ctas(3)InsertAppend(4)Update2)不需要也不能人工干预(内部机制不是特别清楚)3)经常使用的列会有建立StorageIndex5.SQL启用StorageIndex启用必要条件(非充分条件)1)必须是SmartScan方式2)必须有where子句3)并行查询6.ORACLE提供参数禁用或启用StorageIndex(默认启用)2.3StorageIndex特点1.特点1)在内存中,速度快,也意味着重启即丢失2)不同于传统Index,非find数据,而是filter不要的数据3)自动和透明,返回的数据是完全一致的和事务级的4)与普通索引机制不一样,不针对表建立,针对数据块建立,每1m数据块建立最大最小值,空间小5)最多8列6)根据其过滤方式,表字段数据越有序,则存储索引效果越好2.原则1)只适合Query,不适合DML2)按普通索引查询则无法使用StorageIndex3)一般第二次查询可用上StorageIndex(首次查询用不上,因为StorageIndex还没有建立),查询后会重建StorageIndex4)数据修改,ORACLE会维护存储索引(机制不清),有时可能会失效(不会导致错误)5)字段值(非字段类型)为数字的可以使用存储索引,字段值存在字符型不使用2.4StorageIndex应用SQL>set autot onSQL>select/*+no_index(t)*/count(1)from ac42t where aac001=;COUNT(1)----------28已用时间:00:00:09.43执行计划----------------------------------------------------------Planhashvalue:-----------------------------------------------------------------------------------|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|-----------------------------------------------------------------------------------|0|SELECTSTATEMENT||1|7|1558K(1)|05:11:37||1|SORTAGGREGATE||1|7||||*2|TABLEACCESSSTORAGEFULL|AC42|17|119|1558K(1)|05:11:37|-----------------------------------------------------------------------------------PredicateInformation(identifiedby operation id):---------------------------------------------------2-storage("AAC001"=)filter("AAC001"=)Note------automatic DOP:skippedbecause of IOcalibrate statistics aremissing统计信息----------------------------------------------------------143recursivecalls0db block gets6122354consistent gets6122225physicalreads2088redo size347bytessentvia SQL*Net to client360bytesreceivedvia SQL*Net from client2SQL*Netroundtrips to/from client6sorts(memory)0sorts(disk)1rows processedSQL>set autot offSQL>select*from v_flash;NAMEVALUE--------------------------------------------------------------------------cellflash cacheread hits80cell num smartIO sessionsusing passthru mode due to cellsrv0cell num smartIO sessionsusing passthru mode due touser0cell physical IObyteseligible for predicateoffload5.0153E+10cell physical IObytessaved bystorageindexcell physical IOinterconnectbytesreturned by smart scan7277832db block gets66db block gets direct0db block gets fromcache66db block gets fromcache(fastpath)0physicalread IOrequests48240physicalread requestsoptimized132已选择12行。