对一则数据库设计的经验谈

我去年中旬负责了一个电子政务的项目,项目从2006年底进行开发,经历了1期和2期,对于1期的开发自己是主要的编码人员,2期自己负责项目,架构是 osworkflow(其他公司的产品),struts+spring+hibernate,prototype,用到都是现在比较成熟的开源技术,不过其实开源给与我们带来了很大的隐患和烦恼,这个项目是jboss作为web服务器,数据库的用的sql server,用到了集群和负载均衡技术。

从去年到今年年初运行很稳定,基本没有发生什么异常状况,但是到了年后,由于年前在原来的基础上,有上了20个流程,4大模块,使得web服务器和数据库服务器的压力增大,经常会发生内存溢出,首页面白板,宕机的状况。

当时我手底下的人都被分配到了其他的项目组,我们公司没有固定的项目组成员,一个项目中途都可以调走人,所以自己也习惯了,这个时候就是自己对项目进行优化和性能提高的时候。

这里给大家说的是一个数据库设计的问题,其他如jboss内存溢出,数据库分区优化,数据库索引优化以后将陆续为大家展开,当然这只是自己的经验之谈,很多地方肯定有不对的地方,望大家指出。

这个项目有一个模块是 公告信息,并且涉及到 每个用户是否察看过 公告信息,没有察看会有new图标,察看过了new会消失,当时设计的时候遵循了数据库的范式,因为该项目用户大概300人,每天的发布的公告信息大概有30多个,公告信息的业务表 增长不大,而中间的查看信息表每天大概300*30地记录递增,因为运行了1年多,大概产生了4000000记录,级联查询语句查询每个人的消耗sql 的资源时间是 10多秒,表结构如上传的图片,为此把标示表干脆省下来,在业务表加上state字段,初始化的时候存储了所有用户得id信息,当用户看过该条公告,id就删除,虽然违背了数据库设计的范式要求,但是确实提升了性能。

其实有一个问题我现在也很奇怪,就是微软在sql server引擎的设计上,该项目的数据库服务器 4g得内存,sql server 在运行1个月的时候,会战用1.7--1.9g的内存容量,i/o成为了数据库的性能最大的瓶颈,当时自己还找了probe,和loadrunner进行了测试,没有发现连接池没有关闭的问题。查询资料。上面说,微软在设计上就是这样,令我很疑惑。也望大家给与意见。
[img][/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值