【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
在大数据并发处理中,很容易发生系统hang机。
此处应该考虑两点,系统锁死,或者IO流异常
1.IO流异常
在系统查询大量数据的时候,我们通常采用索引的方式来优化系统查询。而索引在查询方面会有瓶颈。
什么是索引:
索引是数据库中一种可选的数据结构,它通常与表或簇相关。用户可以在表的一列或数列上建立索引,通常以提高在此表上执行 SQL 语句的性能。就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引提供了更为迅速地访问表数据的方式。正确地使用索引能够显著的减少磁盘 I/O。
通俗的讲就是数据的分类后的目录。在此处我们查询数据的时候通过查询索引能够很快的找到数据所在,并返回我们想要的数据。这就是索引的作用所在,在海量的数据库里查询少量的数据的时候索引是个不错的选择。但是 当我们查询的数据量过大的时候,就会产生性能的瓶颈。
例如:当我在100万条数据中查询10万条数据的时候,数据库会去大量的遍历索引,会导致整个数据库宕机停止响应。此时使用索引还不如全表遍历查询更快。此时索引就会失效。因为你每次查询我都得去查询索引找到对应的信息,而全表查询我十个中挑一个记录。性能耗费以及所用时间可能就已经不相上下了。当我查询的数据量过大比如100万查询50万数据。此时你在查索引 可能就是得不偿失了。
注:这个时候查询索引会导致SQL卡机,查询索引,索引此时并不会响应。也就是说 当你查询数据和所有数据所达一定比例的时候会导致索引失效。Oracle官方数据给出是30%实际应用中发现超过10%基本就失效
索引的失效:
索引的失效并非在查询大量数据的同时会导致这个问题,当大量的Insert/update对表进行操作的时候,也会导致索引失效。大量的更新插入操作会导致整个索引结构的变动。一旦一个数据改变,并且改变的列比较多,可能会引起好几个索引跟着改变
索引的高效查询都是基于索引的未失效前提。
此处提出SQL优化几点意见。
1.书写SQL的同时 保证SQL的前倾性。SQL过滤是根据where条件后的条件来过滤的,而Oracle的过滤机理则和where条件的放置顺序有关,我们将能够确定概率的条件放在第一位,这样我们找到的概率就会变高,以此类推。第二位第三位条件。
2.索引创建最好是不经常变动的列,如果经常变动,则需要索引重建
2.系统锁死
程序设计中导致系统锁死,无非就是加锁后其他线程等待资源导致系统锁死,或者执行update/insert 未提交,导致其他update/insert操作挂起等待。
所以在高并发中,正确设计程序过程
来源:oschina
链接:https://my.oschina.net/u/2970507/blog/777535