这个有很多可以说的了以下全部手打by lcg1986:
数据库层面优化
从数据库本身来优化,优化SQL语句,建立适当的索引尽量让查询条件命中索引,避免全表扫描
精简查询语句,使用select 字段,避免使用select
数据库使用主备机或者集群模式,进行读写分离
对数据进行分库分表
系统应用层面优化
系统使用连接池连接数据库,避免频繁的建立连接,释放连接的IO开销
使用缓存,根据业务场景对数据进行划分,尽量将基本不会发生改变的数据缓存下来,查询时优先查询缓存,减少对数据库的访问
对服务进行降级功能设计,在并发大到数据库实在无法处理的情况,对造成数据拥堵的服务进行降级
支持数据的读写分离读请求和写请求分别访问不同的数据库
支持分库分表,或引入数据库中间件,如Mycat
硬件方面优化
尽量使用SSD磁盘类型的数据库服务器,相比传统机械硬盘类型的服务器,具有更高的IO吞吐能力
如果可能,尽量保证系统与数据库,数据库各个机器在同一区域内避免如系统服务在北京,数据库服务器在上海的情况,减少因为网络环境,网络带宽等因素带来的影响
数据库连接池的连接被用光了,自然就不能连接了
可以加大最大连接数,还就没了连接用完了要及时关闭,以免占着坑不拉屎,
想那些sql语句复杂的最好简化以减少查询的时间,寻找别的解决方法
补充一下:不管对于什么样的应用程序,即使频繁访问数据库的程序,也不建议长时间不释放连接。因为数据库最主要的目的就是用来共享数据,而且数据库必然要为多用户、多程序服务,所以数据库有限的资源是非常重要的。现在为了提供效率,一般都是使用数据库连接池的方法。
不知道你用来干什么,无法说的更详细了。举例子,就好比你给某个厂商打电话,要求技术支持。即使你不说话,但是如果你一直不放下电话,其他人就无法把电话打进来。大的厂商,会有多个客户电话,但不是无限的。
而数据库也是如此,虽然有的服务器强大些,但是他的处理能力也有限的。当某个程序连接上数据库后,数据库就必须为他分配一定的资源,只要这个程序不断开连接,那么为他分配的资源,就无法释放,也就无法被其他程序使用。当这样的程序足够多时,再有新程序来,数据库就没有资源可分配了。这时有的数据库就要重新启动了,强行释放这些被占用的资源。
你可自己测试一下,多运行几个你这样的程序,看看你的数据库能承受到什么时候。
数据库资源包括连接数、游标数等,你可以通过设置数据库参数来增加这些数目,但不是无限的。因为这些资源最终还是会受你的机器硬件限制(内存、CPU等)
数据库的资源是有限的,如果程序不断开连接,那么数据库资源就无法释放。如果还有其他程序需要访问数据库,那么当数据库资源耗尽的时候,这些程序就只能等待,直到超时失败。
预生成静态页面或者使用缓存(内存数据库/nosql)
静态页面是根据业务来确定是否合适使用,例如博客网站,会对文章进行生产静态html,固定时间更新(例如每天重新生成一次),这种内容修改几率比较小的比较适合,可以有效的避免每次获取文章内容都要交互数据库,直接访问对应静态页面(相关技术可以查看freemarker等)
缓存是针对读取比较频繁,且数据不是很大的情况。nosql类似,去掉了数据库比较复杂的强制关系(例如主外键等),只是单纯的存储读取数据,具体数据/业务逻辑再程序中去具体控制,可以极大的加快访问速度,例如(redis,mongodb)
具体可以搜索nosql或者key-value 数据库了解。
以上就是关于频繁查询数据库,怎么保证整个系统的性能全部的内容,包括:频繁查询数据库,怎么保证整个系统的性能、tomcat 数据库连接池 查询过于频繁时导致 数据库连接失败!、长时间连接数据库不断开有什么不好等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)