0
很难想象,在若干年后,我又要开始学习Oracle了。
由于公司的业务快速增长,前期主要重心一直是在稳定系统并发上,在项目相对稳定后,公司也开始注重人才培养了,于是有了每周的定期培训。
1
前段时间,一个朋友跳槽,进入新的公司后,架构师安排他搞性能优化相关的工作,因为他们公司的业务急剧增加,用户数已突破千万,对应的业务表数据肯定也急速增加,以下是我们的简单对话
朋友:你们性能优化都怎么搞的啊,分库分表怎么做的啊
我:我们原来确实是用Mysql做分库分表了,现在不用了,现在开始用
Oracle了,用的Oracle的分区
朋友:....,有没有之前Mysql分库分表方案和技术实现
我:http://xxxxx(甩过去一个开源中间件官方连接)
朋友:...,
我: .....
以下附上一张图
image-20200827170426128
其实,在单表日数据过千万的系统里,这样的数据量确实是比较小了,更谈不上什么并发,但是系统规划不合理,并发上来了真就难搞了。
2
很多初中级程序员面试的时候,问他大数据场景下怎么优化系统性能,上来就是分库分表,真是醉了
假设你写的代码Sql有问题,再怎么分库分表也解决不了问题,反而因为分库分表带来了更为复杂的问题和成本开销
所以可以体现出sql优化反而是提升系统性能成本最低的方式
3
通过几节课的学习,我们掌握了Oracle客户端工具的使用,了解了Oracle的索引类型,索引的使用以及如何分析执行计划,如何根据执行计划进行优化,总体来说,收获还是挺大的
4
尾部的话想给大家一个方向如何去学习基于Oracle Sql的性能优化,当然,这对于Mysql也是通用的,大体如下:
- 了解Oracle的索引数据结构。带着疑问想为什么要使用这种数据结构
- 了解Oracle的优化方式。我们知道,在Mysql的流行版本里,有个AB字段索引,你写where A=B 和写Where B=A 都能命中这个索引,这显然是Mysql的优化器进行了优化,这在早期Mysql版本里可是不会命中的,所以了解Oracle的优化方式你就知道哪些语句被优化器优化后会付出什么代价,Oracle的优化器共有两种的优化方式,即基于规则的优化方式(简称为RBO)和基于代价的优化方式(简称为CBO)。
- 了解Oracle的索引类型。这样就知道什么字段该建什么索引,打个比方,很多人都不知道类似性别这样的字段该建什么样的索引
- 了解Oracle的执行计划。很多人面试的时候都会说慢sql语句看执行计划,当真正拿到一个几百行的语句给你看执行计划,你知道哪些语句先执行哪些后执行吗?能看懂执行计划对应的参数和解决方案才能真正的解决问题
- 业务让步。当你的Java代码和Sql代码优化到一定地步,这时候就需要业务做出一定的让步了,当然,你要跟产品说查数据范围,他恨不得把数据库里面的全部查出来,但当你跟老板说加钱买服务的时候他肯定会跟你说查半个月也是可以的嘛
- 了解数据库的并发瓶。当你觉得一个系统一秒并发几千的时候可能会不屑一顾,但你了解到你们部署的数据库一秒只能支撑几百的时候可能你会大吃一惊了,但这就没有解决方案了吗?加集群机器呢?加完集群还达不到怎么办呢?成熟系统都是怎么解决的呢?带着这个问题思考一下
- 了解Oracle的存储过程和函数。存储过程,很多人包括我其实挺反感这个,甚至我都不会写,但是用的到位真的是比Java调用程序快太多太多倍了,总之,不要轻易用,用的时候考虑下后果即可
- 数据库并不是万能的,它只是你性能优化中比较重要的一环,性能优化确实是个比较蛋疼的问题,让一个不懂业务的架构师做性能优化行吗?可以,但是有限,所以在做系统的时候一定要考虑全面,不会跟着架构师学就行了
本文暂时没有评论,来添加一个吧(●'◡'●)