zoukankan      html  css  js  c++  java
  • SQLServer 高并发下的 【表变量,临时表,公共表表达式】的性能比拼(HIS3)

    标题:一次高并发下的sql分析,及最终解决方法:

    现象:pagelatch_ch,pagelatch_ex 资源等待多

    1. 对bulk insert 的使用方式改造,1000条以上的数据才会用bulk insert (数据条目少的时候使用insert 命令)


    2. order 中使用了大量的表变量,对tempdb 的性能要求比较高,经常出现 pagelatch_ch,pagelatch_ex 的等待,为此将tempdb 的文件数量调整至 与数据库服务器的CPU核心数 等同,tempdb的数据文件文件的大小和增长值要一样;但最终将部分表变量改造为 公共表表达式写法 with cte 方式 
           注1. SQLServer 【表变量,临时表】性能比对(表变量比临时表性能好,造成的pagelatch_sh,pagelatch_ex 等待更少,在tempdb 文件数与cpu 核心数一致的情况下)
    具体性能比对结果如下:https://channel9.msdn.com/Series/SQL-Workshops/Tempdb-Metadata-Contention-in-SQL-Server-Table-Variable-Vs-Temporary-Table)

           注2:过多的表变量会导致sqlserver tempdb 元数据争用(tempdb metadata 上会有pagelatch_sh,pagelatch_ex资源等待 ),后续把表变量逐步改善为 WITH CTE 写法(公用表表达式common table express(CTE));CTE 表达式比 表变量效率更高或持平,但是不会对tempdb进行资源消耗,不会导致tempdb 的元数据资源等待
    https://www.cnblogs.com/xmliu/p/7085644.html?utm_source=itdadao&utm_medium=referral

    3.将事务的隔离级别进行调整:SERIALIZABLE(可序列化)->READ COMMITTED(已提交读,默认级别) [https://www.cnblogs.com/chenmh/p/3998614.html]

  • 相关阅读:
    51nod 最长公共子序列Lcs
    输入挂
    HDU 圆桌会议
    畅通工程
    异形卵
    Python中的多态如何理解?(转帖,让我很理解。)【外加自我看法】(这次修改后应该就是标准答案了)
    Python短路逻辑or的巧妙使用。
    Python三元表达式
    稍微记号下Python的赋值技巧。
    刚看到一个字符串的替换命令,makeslate,记号一下(用处大?应该不算)!
  • 原文地址:https://www.cnblogs.com/ifreesoft/p/14101936.html
Copyright © 2011-2022 走看看