今天接到客户投诉说系统卡死了,经过一翻努力,终于解决了。现将解决步骤记录一下,以便下次参考:

因为客户系统集中在阿里云上面,使用的是ms sql2008数据库,上面有N个客户,一下子无法知道是哪个客户。

  第一步,先打开任务管理器,看看cpu使用情况,

一看就知道是 ms sql server有大查询占用了所有的CPU时间,所以卡死系统 。

第二步,打开ms sql server 的活动监控器,查看是哪条语句卡死。

打开活动监控器的方法。在

中的对象资源管理器,找到服务器,右击。可以看到“活动监控器”,或者用快捷键ctrl+alt+A  .。

第三步,找到有问题 的语句。点开进程, 通过任务状态,筛选 running的进程 。

逐个查看运行中的语句,分析最有可能卡住 系统的语句,去运行一下。就可以查到是哪条语句卡住 了。

我的情况就是下面这句:

SELECT A.cCrm, A.cCode AS cOrderCode, A.dRequire, A.dSubmit, B.*,
C.cCode AS cProductCode, B.cProductSpec BcProductSpec, A.dConfirm,
A.dCheck1, C.cParamter, C.cSpec AS cProductSpec, C.cColor, A.cCreator
FROM Orders A WITH ( NOLOCK )
LEFT JOIN Orders_Product B WITH ( NOLOCK ) ON A.cID = B.cOrdersID
LEFT JOIN Product C WITH ( NOLOCK ) ON B.cProductID = C.cID
LEFT JOIN (
--生产的产品ID
SELECT DISTINCT A1.cProductID
FROM dbo.Product_Item A1
LEFT JOIN dbo.Orders_ProductItem A2 ON A1.cProductID = A2.cProductID
WHERE A1.iProduct != 0
) D ON B.cProductID = D.cProductID
WHERE 1 = 1
AND B.cProductID = D.cProductID
AND A.iCancel = ''
AND ( iStatus = 30
OR ( iStatus = 20
AND iNewCRM != 1
AND NOT EXISTS ( SELECT 1
FROM Orders_ProductItem WITH ( NOLOCK )
WHERE iCustom = 1
AND cOrdersID = A.cID )
)
)
AND ( A.iStatusPP = 0
OR A.iStatusPP = 1
)
AND NOT EXISTS ( SELECT 1
FROM MOrders_Product
LEFT JOIN dbo.MOrders ON MOrders.cID = MOrders_Product.cMOrdersID
WHERE cOrdersProductID = B.cSubID
AND dbo.MOrders.iStatus != 2 )
AND B.iCancelM = 0
AND B.cSubID NOT IN (
SELECT B.cOrdersProductID
FROM DOrders A
LEFT JOIN DOrders_Sub B ON A.cID = B.cDOrdersID
WHERE iStatus = 3 )
ORDER BY A.dUDate DESC;

经过分析定位到:not in 导至系统卡顿:

 B.cSubID NOT IN (
SELECT B.cOrdersProductID
FROM DOrders A
LEFT JOIN DOrders_Sub B ON A.cID = B.cDOrdersID
WHERE iStatus = 3

将not in 改为 not exists问题得以解决,系统正常运作。

改后的代码为:

SELECT A.cCrm, A.cCode AS cOrderCode, A.dRequire, A.dSubmit, B.*,
C.cCode AS cProductCode, B.cProductSpec BcProductSpec, A.dConfirm,
A.dCheck1, C.cParamter, C.cSpec AS cProductSpec, C.cColor, A.cCreator
FROM Orders A WITH ( NOLOCK )
LEFT JOIN Orders_Product B WITH ( NOLOCK ) ON A.cID = B.cOrdersID
LEFT JOIN Product C WITH ( NOLOCK ) ON B.cProductID = C.cID
LEFT JOIN (
--生产的产品ID
SELECT DISTINCT A1.cProductID
FROM dbo.Product_Item A1
LEFT JOIN dbo.Orders_ProductItem A2 ON A1.cProductID = A2.cProductID
WHERE A1.iProduct != 0
) D ON B.cProductID = D.cProductID
WHERE 1 = 1
AND B.cProductID = D.cProductID
AND A.iCancel = ''
AND ( iStatus = 30
OR ( iStatus = 20
AND iNewCRM != 1
AND NOT EXISTS ( SELECT 1
FROM Orders_ProductItem WITH ( NOLOCK )
WHERE iCustom = 1
AND cOrdersID = A.cID )
)
)
AND ( A.iStatusPP = 0
OR A.iStatusPP = 1
)
AND NOT EXISTS ( SELECT 1
FROM MOrders_Product
LEFT JOIN dbo.MOrders ON MOrders.cID = MOrders_Product.cMOrdersID
WHERE cOrdersProductID = B.cSubID
AND dbo.MOrders.iStatus != 2 )
AND B.iCancelM = 0
AND NOT EXISTS (
SELECT 1
FROM DOrders AA
LEFT JOIN DOrders_Sub BB ON AA.cID = BB.cDOrdersID
WHERE iStatus = 3 AND B.cSubID=bb.cOrdersProductID)
ORDER BY A.dUDate DESC;

原因可以参考以下文章:

https://www.cnblogs.com/totian/p/7597300.html

https://blog.csdn.net/zxu_1995/article/details/82388395

MS Sql 优化步骤及优化not in一例的更多相关文章

  1. 数据库优化实践【MS SQL优化开篇】

    数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...

  2. MS SQL优化

    数据库优化实践[MS SQL优化开篇]   数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应 ...

  3. [置顶] 数据库优化实践【MS SQL优化开篇】

    数据库定义: 数据库是依照某种数据模型组织起来并存在二级存储器中的数据集合,此集合具有尽可能不重复,以最优方式为特定组织提供多种应用服务,其数据结构独立于应用程序,对数据的CRUD操作进行统一管理和控 ...

  4. MS SQL语句优化

    MS SQL Server查询优化方法查询速度慢的原因很多,常见如下几种 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计 ...

  5. 复杂sql优化步骤与技巧

    数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行join,还要进行大量统计性数据查询展示,甚至数据权限控制等操作.最后会导致sql异常复杂,随着数据量增加,或者只是应用到生产环境(正式 ...

  6. 温故知新-Mysql的体系结构概览&sql优化步骤

    文章目录 Mysql的体系结构概览 连接层 服务层 引擎层 存储层 存储引擎 存储引擎概述 存储引擎特性![存储引擎特性对比](https://img-blog.csdnimg.cn/20200510 ...

  7. SQL优化笔记—CPU优化

    补充:常规服务器动态管理对象包括,下面有些资料可能会应用到 dm_db_*:数据库和数据库对象dm_exec_*:执行用户代码和关联的连接dm_os_*:内存.锁定和时间安排dm_tran_*:事务和 ...

  8. 【转】使用SQL Tuning Advisor STA优化SQL

    SQL优化器(SQL Tuning Advisor STA)是Oracle10g中推出的帮助DBA优化工具,它的特点是简单.智能,DBA值需要调用函数就可以给出一个性能很差的语句的优化结果.下面介绍一 ...

  9. SQL Server数据库性能优化之索引篇【转】

    http://www.blogjava.net/allen-zhe/archive/2010/07/23/326966.html 性能优化之索引篇 近期项目需要, 做了一段时间的SQL Server性 ...

随机推荐

  1. djangoORM 修改表结构/字段/外键操作

    Django支持修改表结构 把max_length=64 改为60 再执行一遍 python manage.py makemigrations python manage.py migrate 如果是 ...

  2. 一种css效果:标题带色块,React+Less

    .title { display: inline-block; font-size: 15px; font-weight: bold; position: relative; padding: 5px ...

  3. postgres判断字符串是否为时间,数字

    时间判断函数定义: -- FUNCTION: public.isdate(character varying) -- DROP FUNCTION public.isdate(character var ...

  4. github新建本地仓库并将代码提交到远程仓库

    方式一: 在github上新建好仓库:gitTest 使用命令git clone git@github.com:yourgithubID/gitTest.git,克隆到本地相应的位置 将要上传的工程代 ...

  5. Win10提示 该文件没有与之关联的程序来执行操作

    在Win10 2018年更新系统中,如果你手动删除注册表里的快捷箭头注册项,就会打开固定到底部任务栏的应用就会报错,要想恢复正常,先手动恢复原来删除的注册表项. 注册表位置:HKEY_CLASSES_ ...

  6. requests--超时设置,代理设置,身份认证

    超时设置 你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应.基本上所有的接口都应该使用这一参数.如果不使用,你的程序可能会永远失去响应 import requ ...

  7. js 立即调用函数 IIFE(Immediately Invoked Function Expression) 【转】

    原文链接:https://www.cnblogs.com/ming-os9/p/8891300.html JS中 (function(){...})()立即执行函数   1 (function(){. ...

  8. java-int数据的溢出

    数据的溢出: 当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时, 这个整型变量所输出的值将发生紊乱,且不是预期的运行结果. 01 //  整数值如果超出了自己所可以表示范围的最大 ...

  9. ECMAScript 初探 - 对象篇

    一.对象 如果你用过 C++ 或 Java,肯定熟悉类(class).在 ECMAScript 中并没有 "类" 这个词, 其对应的是 "对象定义",不过这太拗 ...

  10. Qt 绘制图表 - Qt Charts版

    一.前言 自从 Qt 发布以来,给广大跨平台界面研发人员带来了无数的福利.但是Qt自己却一直没有提供自带的图表库,这就使得 QWT.QCustomPlot 等第三方图表库有了巨大的生存空间,为了降低开 ...