zoukankan      html  css  js  c++  java
  • 高并发业务下 聚集PK 堆表性能差异

    场景描述

     生产上有一张核心表,读写比例在8:2左右,发现聚集索引字段顺序不佳,经过测试后,发现调整字段顺序后能提高性能。于是在凌晨调整了聚集字段的顺序,但因为操作失误,将聚集索引调成了非聚集索引。在实际业务压力下,聚集,非聚集索引对性能的变化如下。

    类别

    索引名

    类型

    索引字段

    原索引

    PK_XXXXXXX

    Primary key,CLustered

    (C1,C2,C3)

    新索引

    PX_XXXXXXX

    Primary key,Non Clustered

    (C3,C2,C1)

     

    性能指标变化

    1:CheckPoint 情况(蓝线:实际压力,红线:基线)

     

    图1(CheckPoint pages/sec_other)

    2:Disk Write Bytes情况 

      

                                                                  图2(Disk Write Bytes/Sec)

    3:服务器wait_Resource情况

    在sys.sysprocesses.waitResource中,发现大量等待ALLOC_FREESPACE_CACHE (00000000)

    等待类型,该类型反应CheckPoint执行慢,脏页多有关。

    解决过程

      通过把业务切换到其它服务器,把新索引调整为聚集,业务返回后,性能指标恢复到基线一下。

    类别

    索引名

    类型

    索引字段

    新索引

    PX_XXXXXXX

    Primary key, Clustered

    (C3,C2,C1)

    故障总结

    1:从指标上看,非聚集的Disk Write Bytes/Sec的量比聚集高的多,反而写入更繁忙。有些资料中认为,堆表插入速度比聚集表快,因为考虑到聚集插入时,需要寻找键值插入点,而堆表没有这部分时间消耗。

    该故障就是一个非聚集写入变慢的例子。

    参考资料:(SQL Server企业级平台管理实践  徐海蔚著 P25)

      最近SQL Server产品组在SQL Server 2005上做了一个比较,对比有聚集索引和没有聚集索引的表格,在select,insert,update,delete上的性能。……,但出人意料的是,在Insert这一项上,两者也没什么差别。并没有出现聚集索引,影响Insert速度的现象。所以再次强调,在一个大的表格上一定要建立一个聚集索引。除非你的工作负荷压力测试显示出相反的结果。

  • 相关阅读:
    几个ssh和sftp的命令
    发现一个github的奇葩设定
    插耳机对orientation sensor的影响
    android中MediaPlayer类的用法
    Oracle 高性能SQL引擎剖析----执行计划
    【转】对列式数据库的一点总结和展望
    【转】大数据分析(Big Data OLAP)引擎Dremel, Tenzing 以及Impala
    TCP/IP协议详解---概述
    读取HttpWebResponse流的两种方法及注意的问题
    This project references NuGet package(s) that are missing on this computer.
  • 原文地址:https://www.cnblogs.com/iamasqldba/p/2961618.html
Copyright © 2011-2022 走看看