`

SQL server分页查询效率低导致web后台增删改问题

阅读更多

问题描述: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; 

            

  • 大小: 262.4 KB
  • 大小: 98.7 KB
分享到:
评论

相关推荐

    jsp删改分页查询操作

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而“jsp删改分页查询操作”是Web开发中的常见需求。本话题主要涉及如何使用JSP结合MySQL数据库,通过MyEclipse集成开发环境来实现数据的删除、...

    sqlserver 版的java springmvc easyui 增删改

    在本文中,我们将深入探讨如何在Java Spring MVC框架下结合SQL Server数据库以及EasyUI前端库进行数据的增、删、改操作。这对于初学者来说是一个非常实用的学习课题,因为这三者构成了一个基本的Web应用后台开发环境...

    Angularjs(增删改+分页+弹框+Sql数据库)

    这个"Angularjs(增删改+分页+弹框+Sql数据库)"的项目是针对初学者设计的一个示例,旨在帮助他们理解和掌握AngularJS的核心概念以及如何与其他技术(如分页插件、SQL数据库)集成。 在AngularJS中,"增删改"操作是...

    jhsDemo增删改分页

    总之,"jhsDemo增删改分页"是一个实用的学习资源,它涵盖了Web开发中常见的技术栈,对于初学者或者希望深入了解JSF+Spring+Hibernate整合的开发者来说,都是一个不错的起点。通过深入研究和实践,你将能够更好地理解...

    linq to sql实现分层与gridview使用实现增删改

    在本教程中,我们将重点讨论如何利用LINQ to SQL实现分层架构,并结合GridView控件进行数据的增删改操作,这对于新手在进行三层项目开发时是非常实用的。 首先,让我们了解什么是LINQ to SQL。它是.NET Framework ...

    毕业设计jsp+Sturts+hibernate的添删改查以及分页!采用Oracle数据库

    采用Oracle数据库" 是一个基于Web的新闻管理系统,它利用了Java Web技术栈中的核心组件,包括JSP(JavaServer Pages)、Struts、Hibernate,以及数据库管理工具Oracle。这个系统的主要功能是实现对新闻数据的添加、...

    无刷新增删改查 分页 ,很强悍的,不要错过哦

    分页是大型数据集展示的重要手段,它有效地避免了一次性加载大量数据导致的性能问题。在Ajax无刷新场景下,我们可以使用前端的jQuery插件或者自定义JavaScript函数来实现分页效果,同时在后端,Struts2和Hibernate...

    layui数据表格显示增删查改.zip

    - **查询**:用户可以通过输入关键字或选择条件来过滤表格数据,后台根据这些条件查询数据库并返回结果。 - **修改**:用户点击编辑按钮,可以修改表格中的数据,提交后后台执行更新操作。 3. jsp(JavaServer ...

    GridView 使用SqlDataAdapter实现增删改查

    本示例中的"GridView使用SqlDataAdapter实现增删改查"是一个典型的Web应用程序开发案例,通过结合ASP.NET和SQL Server数据库,展示了如何在网页上实现数据的动态操作。 首先,`User表.sql`文件通常包含了创建用户表...

    Asp.NET C#简单三层架构新闻发布系统源代码

    2,后台新闻内容增删改查,添加新闻用到FreeTextBox控件,分页用到AspNetPager分页控件,源码中都带有最新版的相关控件; 3,后台对新闻评论信息查看,删除; 3,前台新闻浏览,查询,最新新闻,热点新闻, 4,前台...

    DTCMS网站内容管理系统(开源)

    数据库:数据库任选一种: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. **网页设计...

    封装Ext.grid.Grid+dwr实现增删该查

    同时,`mssql2000数据库备份`文件表示项目使用了Microsoft SQL Server 2000作为数据库存储,这意味着后端数据库操作可能涉及到SQL Server的特定语法和API。 总的来说,通过封装`Ext.grid.Grid`和DWR,我们可以构建...

    JSP课程设计(数据库添删改查)毕业论文.doc

    2. 数据库查询:运用SQL语言进行数据查询,包括SELECT语句的使用。 3. 数据库操作:学习如何执行INSERT(添加)、DELETE(删除)和UPDATE(修改)操作来管理数据库中的记录。 4. 分页显示:了解并实现分页显示数据,...

    gridview的增删

    在IT行业中,GridView是一种常用的控件,特别是在Web开发和Windows应用程序设计中,它被用于展示数据集合,并提供灵活的数据操作功能,如增删改查。本篇将详细讲解GridView控件在实现“增删该查”操作时的核心知识点...

    jsp加mysql实现网上购物

    3. **分页查询**:大量数据展示时,使用分页查询减少数据库压力。 4. **事务处理**:确保多条数据库操作的原子性和一致性,避免数据不一致。 ### 七、测试与部署 完成系统开发后,进行功能测试、性能测试和安全测试...

    注册系统struts2+jsp+mysql

    【注册系统struts2+jsp+mysql】是一个基于Java Web技术构建的用户管理系统,它集成了Struts2框架、JSP(JavaServer Pages)以及MySQL数据库。这个系统提供了基础的用户管理功能,如用户注册、登录、信息增删改及分页...

    JAVA课程设计报告《新闻发布系统》.docx

    - **软件**:Windows 2000 操作系统,SQL Server 2005 数据库,JDK Version 1.5 开发工具,Tomcat 5.5 Web 服务器,推荐分辨率为1024*768像素。 此新闻发布系统体现了JavaWeb技术在构建动态、交互式网站中的应用,...

Global site tag (gtag.js) - Google Analytics