问题描述:web后台增删改操作很卡,卡的时间长达1个小时左右
环境工具:数据库SQL server;web服务器apache+tomcat
解决过程:1. 网站上线后,使用后台的编辑人员发现在后台维护数据很卡,如图(1)
图(1)
我先检查apache和tomcat发现正常,然后怀疑是数据库的性能问题,就重启了下数据库服务,卡的情况得到解决。
2. 我请教有经验的人,有人说可能是数据库服务器的磁盘阵列是raid5,raid5对SQL server的数据库写操作的性能有很大影响,尤其是数据量大的时候,我通过重装SQL server数据库等各种方式验证,发现不是。
3. 问题再次发生时,我想重启数据库服务器可以解决问题,还可以从web服务器的角度考虑一下,于是重启web服务器,发现也可以解决问题。
4. 根据以上情况,我判断应该是web服务访问数据库服务,处理SQL的session发生异常,于是使用
select request_owner_id
,request_owner_type
,resource_type
,resource_associated_entity_id
,request_session_id spid
,request_lifetime
,request_status
,request_type
,request_mode
,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks
where resource_type='OBJECT';
发现好像是进程死锁了,结果如图(2)。于是在网上寻找解决死锁的方法,始终不得要领。
图(2)
5. 后来仔细研究死锁,想起死锁是两个以上的进程互掐或者环掐,我查到的结果只有一个进程,于是我用
select dtl.request_session_id spid
,spc.spid
,spc.kpid
,spc.blocked
,spc.lastwaittype
,spc.waitresource
,spc.dbid
,spc.uid
,spc.cpu
,spc.status
,spc.cmd
,spc.loginame
,dtl.request_lifetime
,dtl.request_status
,dtl.request_mode
,OBJECT_NAME(dtl.resource_associated_entity_id) tableName
from sys.dm_tran_locks dtl,sys.sysprocesses spc
where dtl.request_session_id=spc.spid
and spc.loginame='cicrodb'
and dtl.resource_type='OBJECT';
才发现不是死锁,是进程阻塞。那么到底造成阻塞的这个进程到底在什么呢?
我用dbcc inputbuffer(77)找到正在阻塞的进程所执行的语句
select top 20 ci.pre_title,
ci.is_pic,
ci.info_id,
ci.cat_id,
ci.model_id,
ci.description,
ci.from_id,
ci.title,
ci.subtitle,
ci.title_color,
ci.thumb_url,
ci.author,
ci.editor,
ci.source,
ci.content_url,
ci.weight,
ci.hits,
ci.day_hits,
ci.week_hits,
ci.month_hits,
ci.released_dtime,
ci.site_id,
ci.page_count,
ca.cat_cname
from cs_info ci,cs_info_category ca
where ci.cat_id = ca.cat_id
and ci.site_id = ca.site_id
and ca.cat_id ='10260'
and ci.info_status = 8
and ci.final_status = 0
and ci.info_id not in
(select top 111940 ci.info_id
from cs_info ci,cs_info_category ca
where ci.cat_id = ca.cat_id
and ci.site_id = ca.site_id
and ( ca.cat_id in ( select cat_id from cs_info_category where cat_position like '$0$10258$10260$%' ) )
and ci.info_status = 8
and ci.final_status = 0
order by ci.released_dtime desc);
6. 这段SQL是一段分页查询的SQL,采用了top方案,我直接将这段SQL复制到SQL server客户端上执行,发现要1个小时才能执行完,于是印证了为什么客户保存数据,要卡1个多小时。因为目前SQL server分页查询有三种方案:
A. top方案
B. max/min方案
C. rownumber方案
效率:rownumber方案 > max/min方案 > top方案;rownumber方案sql复杂,支持SQL server2000以上;max/min方案sql复杂,不支持非唯一性列排序查询;top方案不支持复合主键查询。
7. 根据项目的需要,选择rownumber方案,改为如下情况:
select top 20 ci.rownum,
ci.pre_title,
ci.is_pic,
ci.info_id,
ci.cat_id,
ci.model_id,
ci.description,
ci.from_id,
ci.title,
ci.subtitle,
ci.title_color,
ci.thumb_url,
ci.author,
ci.editor,
ci.source,
ci.content_url,
ci.weight,
ci.hits,
ci.day_hits,
ci.week_hits,
ci.month_hits,
ci.released_dtime,
ci.site_id,
ci.page_count,
ci.cat_cname
from (select top 111960 ROW_NUMBER() OVER (ORDER BY ci.info_id) rownum,
ci.pre_title,
ci.is_pic,
ci.info_id,
ci.cat_id,
ci.model_id,
ci.description,
ci.from_id,
ci.title,
ci.subtitle,
ci.title_color,
ci.thumb_url,
ci.author,
ci.editor,
ci.source,
ci.content_url,
ci.weight,
ci.hits,
ci.day_hits,
ci.week_hits,
ci.month_hits,
ci.released_dtime,
ci.site_id,
ci.page_count,
ca.cat_cname
from cs_info ci,cs_info_category ca
where ci.cat_id = ca.cat_id
and ci.site_id = ca.site_id
and ( ca.cat_id in ( select cat_id from cs_info_category where cat_position like '$0$10258$10260$%' ) )
and ci.info_status = 8
and ci.final_status = 0
order by ci.released_dtime desc) ci
where ci.rownum>111940
order by ci.released_dtime desc;
相关推荐
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而“jsp删改分页查询操作”是Web开发中的常见需求。本话题主要涉及如何使用JSP结合MySQL数据库,通过MyEclipse集成开发环境来实现数据的删除、...
在本文中,我们将深入探讨如何在Java Spring MVC框架下结合SQL Server数据库以及EasyUI前端库进行数据的增、删、改操作。这对于初学者来说是一个非常实用的学习课题,因为这三者构成了一个基本的Web应用后台开发环境...
这个"Angularjs(增删改+分页+弹框+Sql数据库)"的项目是针对初学者设计的一个示例,旨在帮助他们理解和掌握AngularJS的核心概念以及如何与其他技术(如分页插件、SQL数据库)集成。 在AngularJS中,"增删改"操作是...
总之,"jhsDemo增删改分页"是一个实用的学习资源,它涵盖了Web开发中常见的技术栈,对于初学者或者希望深入了解JSF+Spring+Hibernate整合的开发者来说,都是一个不错的起点。通过深入研究和实践,你将能够更好地理解...
在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并结合GridView控件进行数据的增删改操作,这对于新手在进行三层项目开发时是非常实用的。 首先,让我们了解什么是LINQ to SQL。它是.NET Framework ...
采用Oracle数据库" 是一个基于Web的新闻管理系统,它利用了Java Web技术栈中的核心组件,包括JSP(JavaServer Pages)、Struts、Hibernate,以及数据库管理工具Oracle。这个系统的主要功能是实现对新闻数据的添加、...
分页是大型数据集展示的重要手段,它有效地避免了一次性加载大量数据导致的性能问题。在Ajax无刷新场景下,我们可以使用前端的jQuery插件或者自定义JavaScript函数来实现分页效果,同时在后端,Struts2和Hibernate...
- **查询**:用户可以通过输入关键字或选择条件来过滤表格数据,后台根据这些条件查询数据库并返回结果。 - **修改**:用户点击编辑按钮,可以修改表格中的数据,提交后后台执行更新操作。 3. jsp(JavaServer ...
本示例中的"GridView使用SqlDataAdapter实现增删改查"是一个典型的Web应用程序开发案例,通过结合ASP.NET和SQL Server数据库,展示了如何在网页上实现数据的动态操作。 首先,`User表.sql`文件通常包含了创建用户表...
2,后台新闻内容增删改查,添加新闻用到FreeTextBox控件,分页用到AspNetPager分页控件,源码中都带有最新版的相关控件; 3,后台对新闻评论信息查看,删除; 3,前台新闻浏览,查询,最新新闻,热点新闻, 4,前台...
数据库:数据库任选一种:SQL Server 2000(推荐)、SQL Server 2005、SQL Server 2008 Web服务器:IIS 5.0 及以上版本(推荐 IIS6.0) 演示网址: 前台网址:http://dtcms.it134.cn 后台管理:...
9. **SQL Server数据库**:系统选用SQL Server作为后台数据库,存储新闻内容、用户信息、权限设置等数据。SQL Server提供了强大的数据处理能力、事务处理和安全性,适合作为大型Web应用的数据存储。 10. **网页设计...
同时,`mssql2000数据库备份`文件表示项目使用了Microsoft SQL Server 2000作为数据库存储,这意味着后端数据库操作可能涉及到SQL Server的特定语法和API。 总的来说,通过封装`Ext.grid.Grid`和DWR,我们可以构建...
2. 数据库查询:运用SQL语言进行数据查询,包括SELECT语句的使用。 3. 数据库操作:学习如何执行INSERT(添加)、DELETE(删除)和UPDATE(修改)操作来管理数据库中的记录。 4. 分页显示:了解并实现分页显示数据,...
在IT行业中,GridView是一种常用的控件,特别是在Web开发和Windows应用程序设计中,它被用于展示数据集合,并提供灵活的数据操作功能,如增删改查。本篇将详细讲解GridView控件在实现“增删该查”操作时的核心知识点...
3. **分页查询**:大量数据展示时,使用分页查询减少数据库压力。 4. **事务处理**:确保多条数据库操作的原子性和一致性,避免数据不一致。 ### 七、测试与部署 完成系统开发后,进行功能测试、性能测试和安全测试...
【注册系统struts2+jsp+mysql】是一个基于Java Web技术构建的用户管理系统,它集成了Struts2框架、JSP(JavaServer Pages)以及MySQL数据库。这个系统提供了基础的用户管理功能,如用户注册、登录、信息增删改及分页...
- **软件**:Windows 2000 操作系统,SQL Server 2005 数据库,JDK Version 1.5 开发工具,Tomcat 5.5 Web 服务器,推荐分辨率为1024*768像素。 此新闻发布系统体现了JavaWeb技术在构建动态、交互式网站中的应用,...