首页 文章 精选 留言 我的

精选列表

搜索[oracle],共6838篇文章
优秀的个人博客,低调大师

2012 oracle数据库会议总结

此次会议人爆满的程度有点像平时挤300路公交车的场面,最后连坐的地方都没有,我在最后一排站了3小时,听完的OracleSQL优化,录的音只听见关门声,咳嗽声,各种嘈杂声,幸亏笔头还好使,把一些重点给记录下来,得以分享之。 言简意赅,下面主要是性能优化一块。 一、从硬件角度上优化 1、加内存 InnoDB_Buffer_Pool缓冲池的大小决定了数据库的性能,若数据库中的数据可以完全存放于缓冲池中,则这时数据库的性能是最优秀的。 2、传统SATA磁盘升级为固态硬盘(fusion-io) 在生产环境中,数据库的大小通常都会大于内存的大小,因此不可避免的存在磁盘的读取操作。而传统磁盘的随机读写性能很差,往往在压力大时,CPU的I/OWAIT值就会很大。固态硬盘(fusion-io)采用闪存作为存储介质,读取速度相对机械硬盘更快,固态硬盘不用磁头,寻道时间几乎为0,持续写入的速度非常惊人,目前机械硬盘最快也要14毫秒左右,而固态硬盘可以轻易达到0.1毫秒甚至更低。 在日常家用超级本市场中,很多都配置上了固态硬盘。 二、从业务角度上优化 1、数据迁移减少query请求量 迁移数据,把一台机器的部分数据迁移到另一台机器里,从而减缓某一台机器压力大的问题。 2、前端增加Cache层(Memcache) 把一些不频繁更新的数据缓存在Cache层上,从而减缓后端数据库的压力。 3、拆分表 比如一张70G的大表,数据记录数达到上亿条,这时在对大表操作就会比对小表操作消耗性能大,所以通过取模的形式 insertintotable_new_0select*fromtable_oldwheremod(user_id,100)=0; insertintotable_new_1select*fromtable_oldwheremod(user_id,100)=1; insertintotable_new_2select*fromtable_oldwheremod(user_id,100)=2; …… insertintotable_new_99select*fromtable_oldwheremod(user_id,100)=99; 搜狐、人人网也采用了此类方法。 4、读写分离 Master负责写,Slave负责读。 三、从软件角度上优化 1、替换掉MySQL5.1,升级到MySQL5.5,这样可以充分利用CPU多核。附上官方压力测试对比图: 四、优化索引 建立适当的索引,避免全表扫描,避免不必要的排序。 1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。 2、索引越多,更新数据的速度越慢。 3、用EXPLAIN来分析SQL语句的性能。 例1、orderby优化 mysql>descstudent; +-------+------------+------+-----+---------+-------+ |Field|Type|Null|Key|Default|Extra| +-------+------------+------+-----+---------+-------+ |id|int(11)|NO|PRI|0|| |name|varchar(6)|YES||NULL|| |class|int(11)|YES|MUL|NULL|| |score|int(11)|YES||NULL|| +-------+------------+------+-----+---------+-------+ 4rowsinset(0.12sec) student表学生id为主键,班级ID是索引。 mysql>explainselect*fromstudentwhereclass=1orderbyscoreDESC; +----+-------------+---------+------+---------------+-------+---------+-------+------+-----------------------------+ |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| +----+-------------+---------+------+---------------+-------+---------+-------+------+-----------------------------+ |1|SIMPLE|student|ref|class|class|5|const|2|Usingwhere;Usingfilesort| +----+-------------+---------+------+---------------+-------+---------+-------+------+-----------------------------+ 1rowinset(0.03sec) 可以看到Usingfilesort使用到了排序。这是因为通过班级ID等于1,先过滤出符合的记录,然后再把符合的记录一一排序。 所以,建立class和score的联合索引,减少排序。 mysql>showindexfromstudent; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ |Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment| +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ |student|0|PRIMARY|1|id|A|8|NULL|NULL||BTREE||| |student|1|class|1|class|A|8|NULL|NULL|YES|BTREE||| |student|1|class|2|score|A|8|NULL|NULL|YES|BTREE||| +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3rowsinset(0.03sec) mysql>explainselect*fromstudentwhereclass=1orderbyscoreDESC; +----+-------------+---------+------+---------------+-------+---------+-------+------+-------------+ |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| +----+-------------+---------+------+---------------+-------+---------+-------+------+-------------+ |1|SIMPLE|student|ref|class|class|5|const|2|Usingwhere| +----+-------------+---------+------+---------------+-------+---------+-------+------+-------------+ 1rowinset(0.02sec) 五、SQL优化几个实例 例1、避免where条件使用函数 mysql>explainselect*fromtt3wheredate(t)=CURDATE(); +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ |1|SIMPLE|tt3|ALL|NULL|NULL|NULL|NULL|6|Usingwhere| +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ 1rowinset(0.03sec) 这种情况是不会用到索引的,改下SQL即可。 mysql>explainselect*fromtt3wheret>DATE_FORMAT(CURDATE(),'%Y-%m-%d'); +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+ |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+ |1|SIMPLE|tt3|range|IX_time|IX_time|4|NULL|2|Usingindexcondition| +----+-------------+-------+-------+---------------+---------+---------+------+------+-----------------------+ 1rowinset(0.02sec) 例2、避免使用子查询 MySQL5.6以下版本,优化器对子查询支持不是很好,性能很差,所以一般用join表连接代替。 mysql>selectSQL_NO_CACHEcount(*)fromtest1whereidnotin(selectidfromtest2); +----------+ |count(*)| +----------+ |215203| +----------+ 1rowinset(5.81sec) mysql>selectSQL_NO_CACHEcount(*)fromtest1wherenotexists(select*fromtest2wheretest2.id=test1.id); +----------+ |count(*)| +----------+ |215203| +----------+ 1rowinset(5.25sec) mysql>selectSQL_NO_CACHEcount(*)fromtest1leftjointest2ontest1.id=test2.idwheretest2.idisnull; +----------+ |count(*)| +----------+ |215203| +----------+ 1rowinset(4.63sec) 在MySQL5.6版本,优化器优化了子查询,不必再改写为join。 例3、数据类型,原则是够用就好,减少不必要的大字段,增大I/O量, 如能用varchar就不要用text,能用timestamp,就不要用datetime。 =================================================================== 人人网介绍了他们的架构,是采用keepalive(双master架构,对大表做水平切分100张小表放到不同的服务器上减缓压力) 自己开发的中间件做读写分离。 目前正在尝试MMM架构(3台机器轮训切换) 详见: http://www.mysqlops.com/2011/06/11/mysql-mmm-architecture.html 本文转自hcymysql51CTO博客,原文链接:http://blog.51cto.com/hcymysql/1057375,如需转载请自行联系原作者

优秀的个人博客,低调大师

BEA ESB(ORACLE ALSB)白皮书

AquaLogic Service Bus (ALSB)是用于在面向服务架构(SOA)环境中管理和代理服务和发送服务消息的企业服务总线(ESB)产品。主机环境总是包含有远程Web服务和更为传统的基于消息的联网系统。ALSB充当一个中间层,它接收消息,并对其进行处理以确定接下来将消息发送到何处,以及是否和如何转换消息内容。ALSB通过一种传输协议接收消息,比如HTTP(S)、JMS、File或FTP,然后再通过同一种或另一种传输协议将消息发送出去。ALSB用于封装现有的“业务服务”,并为之提供统一的外观,即,一组“代理服务”。通过提供这种外观,许多服务特征都可以被抽象出来并在一个地方应用,比如安全性策略、服务位置透明性、数据格式、传输协议和消息传递模型(异步、同步)。然后就有可能在版本控制、日志记录、监控、报告、审计、错误处理和客户端应用程序访问等方面集中式地管理这些服务。该架构可以帮助公司最大限度地对现有服务进行控制和重用,并提供一个用于随时间逐步增加新服务的高效模型。 ALSB可以用于对它所代理的服务应用安全性策略。这些安全性策略可以满足针对Web服务机密性、完整性、身份验证和访问控制的任何安全性需求组合。ALSB支持传输层安全性(如SSL)和消息层安全性(如WS-Security),甚至需要的话,还支持对同一服务实例的两种安全性的组合。WS-Security是一组由OASIS管理的规范,它指定了如何对Web服务消息内容(例如,SOAP头部和/或主体)进行加密和签名,以及服务消费者如何对服务提供者进行身份验证(如:通过SAML、X.509)。通过采用消息层安全性策略而不是传输层安全性策略,SOA中的Web服务中间层(比如,ALSB之类的企业服务总线)就可以代理和发送消息而不必对流经它的消息进行解密和重加密。WS-Policy是另一个由OASIS管理的规范,它支持对Web服务指定通用属性和断言。WS-Security规范采用WS-Policy规范作为其语法以支持为Web服务指定安全性特征。 本文转自zylhsy 51CTO博客,原文链接:http://blog.51cto.com/yunlongzheng/554928,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。