一般什么情况下,数据库会大量占用内存导致最后的溢出情况?
我能想到的常见的和理论上的情况有下面几种:
1 假设同时有1000个人访问数据库,每人需要调用3M大小的数据,同时处理的数据量是3G,服务器只有2G内存。这种情况只是理论上,服务器数据库都有多线程阻塞技术,和事务处理逻辑,来保证数据处理的先后顺序,而不会是绝对的同时进行。不过一般的请求很少有超过50KB的,请求的数据量越大,同时连接的人数就越少,这是公认的数据库使用定律。
2 复杂的join语句,造成对多个大容量的表进行join操作。
3 数据库端过程函数编程。程序里面逻辑错误,数组分配不合理,或者陷入死循环,或者一次读出太多数据,然后一起处理。
sqlserver2008会把整个数据库缓存到内存里面,就是说数据库有多大,就会占内存多个空间,直到把内存占满为止。
这样可以提高数据库速度的,而且一般是没有问题的,如果要限制数据库占用内存控制,要在数据库里面限制,把占用内存改成最大,在SQL server management studio 里面右击服务器,点击属性,选择内存,选择最大内存。
还暂用了一些虚拟内存,MYSQL的配置文件(MYINI或者MYCNF或者命令行参数)可以指定用多少缓冲区等参数,用这些参数可以控制MYSQL占用多少内存。
操作系统有很高的智能性,对于应用程序分配的内存,没有经常使用的那部分就保留到磁盘里面,把真实内存留给频繁访问的内存区域,所以你也不用太担心,遇到性能问题的再考虑优化。
0条评论