SQL Server压缩字符串存储


生产中遇到一种场景, 生产线上传测试结果的XML文件到数据库, 数据文件大概在7万个字符,保存成文件的大小为70KB左右。 

在写入指定的表时, 经常出现系统卡顿, 后台队列等待时间较长的情况。 

问题排查一直持续了10小时左右。 有修改测试软件, 有新建保存测试记录的表。 最后选择压缩上传的XML文件进行保存, 解决了这个问题。 

DECLARE @XmlData NVARCHAR(MAX);
DECLARE @CPSXmlData VARBINARY(MAX);

SET @XmlData = '

  
    10001
    08AA898852B4
    
    2022-04-19 08:13:33
    161.54
    2022-04-19 08:16:14
    2300078
    0
    1
    0
    BOBCal
    2022-04-19 08:16:14
    
    9990089926
    
  
  
    20001
    10001
    08AA898852B4
    信息写入
    1
    0
    2022.04.19 08:13:33
    1
    1
    2022.04.19 08:13:33
    
  
  
    30001
    20001
    08AA898852B4
    1
    2022.04.19 08:13:33
    26.00
    2022-04-19 08:13:59
    0
    2022.04.19 08:13:33
    SoftVesion:V1.1.10P7N2,CreateTime:2021-10-12 14:54:45,HardVesion:V1.1.05,MAC1:08:AA:89:88:52:B4,MAC2:08:AA:89:88:52:B5,MAC3:08:AA:89:88:52:B6,MAC4:08:AA:89:88:52:B7,MAC5:08:AA:89:88:52:B8,MAC6:08:AA:89:88:52:B9,GPON SN前缀:ZTEG,GPONSN:CEC1D33A,GPONSNPWD:GCEC1D33A,VoipAgm:4,WEBUSER:user,WEBPASS:user,OUI_START:08AA89,OUI_END:ZTE0QHEN4G00934,SSID1:ZTE_2.4G_7Vujq5,PASSWORD1:4eiCruRU,VoipAgm:4,SSID1_5G:ZTE_5G_7Vujq5,PASSWORD1_5G:4eiCruRU,
    
  
  
    40001
    30001
    08AA898852B4
    2022.04.19 08:13:33
    2022-04-19 08:13:59
    1
    信息写入
    PASS
    
    
  
  
    20002
    10001
    08AA898852B4
    TX校准
    2
    0
    2022.04.19 08:15:04
    1
    1
    2022.04.19 08:15:04
    
  
  
    30002
    20002
    08AA898852B4
    1
    2022.04.19 08:15:04
    9.00
    2022-04-19 08:15:13
    0
    2022.04.19 08:15:04
    ,DAC=177,TX光值:2.36
    
  
  
    40002
    30002
    08AA898852B4
    2022.04.19 08:15:04
    2022-04-19 08:15:13
    1
    TX校准
    PASS
    
    
  
  
    20003
    10001
    08AA898852B4
    TX DDMI
    3
    0
    2022.04.19 08:15:13
    1
    1
    2022.04.19 08:15:13
    
  
  
    30003
    20003
    08AA898852B4
    1
    2022.04.19 08:15:13
    4.00
    2022-04-19 08:15:17
    0
    2022.04.19 08:15:13
    calc1:2997.82353207439
    
  
  
    40003
    30003
    08AA898852B4
    2022.04.19 08:15:13
    2022-04-19 08:15:17
    1
    TX DDMI
    PASS
    
    
  
  
    20004
    10001
    08AA898852B4
    TX DDMI Test
    4
    0
    2022.04.19 08:15:17
    1
    1
    2022.04.19 08:15:17
    
  
  
    30004
    20004
    08AA898852B4
    1
    2022.04.19 08:15:17
    2.00
    2022-04-19 08:15:19
    0
    2022.04.19 08:15:17
    功率器读取=2.4 dBm,,寄存器读值=2.41172786770047 dBm
    
  
  
    40004
    30004
    08AA898852B4
    2022.04.19 08:15:17
    2022-04-19 08:15:19
    1
    TX DDMI Test
    PASS
    
    
  
  
    20005
    10001
    08AA898852B4
    消光比校准
    5
    0
    2022.04.19 08:15:19
    1
    1
    2022.04.19 08:15:19
    
  
  
    30005
    20005
    08AA898852B4
    1
    2022.04.19 08:15:19
    11.00
    2022-04-19 08:15:30
    0
    2022.04.19 08:15:19
    13.46 dB
    
  
  
    40005
    30005
    08AA898852B4
    2022.04.19 08:15:19
    2022-04-19 08:15:30
    1
    消光比校准
    PASS
    
    
  
  
    20006
    10001
    08AA898852B4
    Bias电流测试
    6
    0
    2022.04.19 08:15:32
    1
    1
    2022.04.19 08:15:32
    
  
  
    30006
    20006
    08AA898852B4
    1
    2022.04.19 08:15:32
    2.00
    2022-04-19 08:15:34
    0
    2022.04.19 08:15:32
    MOD_MAX:104,Bias:13.2,Mod:30.4
    
  
  
    40006
    30006
    08AA898852B4
    2022.04.19 08:15:32
    2022-04-19 08:15:34
    1
    Bias电流测试
    PASS
    
    
  
  
    20007
    10001
    08AA898852B4
    RX DDMI
    7
    0
    2022.04.19 08:15:34
    1
    1
    2022.04.19 08:15:34
    
  
  
    30007
    20007
    08AA898852B4
    1
    2022.04.19 08:15:34
    9.00
    2022-04-19 08:15:43
    0
    2022.04.19 08:15:34
    slopeP1:0.360252827939365,slopeP2:0,offset-4.30767174624793
    
  
  
    40007
    30007
    08AA898852B4
    2022.04.19 08:15:34
    2022-04-19 08:15:43
    1
    RX DDMI
    PASS
    
    
  
  
    20008
    10001
    08AA898852B4
    RX DDMI Test
    8
    0
    2022.04.19 08:15:43
    1
    1
    2022.04.19 08:15:43
    
  
  
    30008
    20008
    08AA898852B4
    1
    2022.04.19 08:15:43
    6.00
    2022-04-19 08:15:49
    0
    2022.04.19 08:15:43
    RXTestPoint1:-6.96587929403258,RXTestPoint2:-14.9757288001557,RXTestPoint3:-20.0877392430751,RXTestPoint4:-25.2287874528034,RXTestPoint5:-30.4575749056068
    
  
  
    40008
    30008
    08AA898852B4
    2022.04.19 08:15:43
    2022-04-19 08:15:49
    1
    RX DDMI Test
    PASS
    
    
  
  
    20009
    10001
    08AA898852B4
    LOS Cal
    9
    0
    2022.04.19 08:15:49
    1
    1
    2022.04.19 08:15:49
    
  
  
    30009
    20009
    08AA898852B4
    1
    2022.04.19 08:15:49
    2.00
    2022-04-19 08:15:51
    0
    2022.04.19 08:15:49
    LosLevel:28
    
  
  
    40009
    30009
    08AA898852B4
    2022.04.19 08:15:49
    2022-04-19 08:15:51
    1
    LOS Cal
    PASS
    
    
  
  
    200010
    10001
    08AA898852B4
    LOS测试
    10
    0
    2022.04.19 08:15:51
    1
    1
    2022.04.19 08:15:51
    
  
  
    300010
    200010
    08AA898852B4
    1
    2022.04.19 08:15:51
    2.00
    2022-04-19 08:15:53
    0
    2022.04.19 08:15:51
    LOS TEST OK
    
  
  
    400010
    300010
    08AA898852B4
    2022.04.19 08:15:51
    2022-04-19 08:15:53
    1
    LOS测试
    PASS
    
    
  
  
    200011
    10001
    08AA898852B4
    灵敏度测试
    11
    0
    2022.04.19 08:15:53
    1
    1
    2022.04.19 08:15:53
    
  
  
    300011
    200011
    08AA898852B4
    1
    2022.04.19 08:15:53
    13.00
    2022-04-19 08:16:06
    0
    2022.04.19 08:15:53
    ,-28.5
    
  
  
    400011
    300011
    08AA898852B4
    2022.04.19 08:15:53
    2022-04-19 08:16:06
    1
    灵敏度测试
    PASS
    
    
  
  
    200012
    10001
    08AA898852B4
    上传电压测试
    12
    0
    2022.04.19 08:16:06
    1
    1
    2022.04.19 08:16:06
    
  
  
    300012
    200012
    08AA898852B4
    1
    2022.04.19 08:16:06
    1.00
    2022-04-19 08:16:07
    0
    2022.04.19 08:16:06
    3.2682
    
  
  
    400012
    300012
    08AA898852B4
    2022.04.19 08:16:06
    2022-04-19 08:16:07
    1
    上传电压测试
    PASS
    
    
  
  
    200013
    10001
    08AA898852B4
    上传温度测试
    13
    0
    2022.04.19 08:16:07
    1
    1
    2022.04.19 08:16:07
    
  
  
    300013
    200013
    08AA898852B4
    1
    2022.04.19 08:16:07
    0.00
    2022-04-19 08:16:07
    0
    2022.04.19 08:16:07
    42.21875 ℃
    
  
  
    400013
    300013
    08AA898852B4
    2022.04.19 08:16:07
    2022-04-19 08:16:07
    1
    上传温度测试
    PASS
    
    
  
  
    200014
    10001
    08AA898852B4
    写A0信息
    14
    0
    2022.04.19 08:16:07
    1
    1
    2022.04.19 08:16:07
    
  
  
    300014
    200014
    08AA898852B4
    1
    2022.04.19 08:16:07
    3.00
    2022-04-19 08:16:10
    0
    2022.04.19 08:16:07
    BOSA_SN:GED-C04G3610351C,DataTime:20220419,checksum(0~62):24,checksum(64~94):131,
    
  
  
    400014
    300014
    08AA898852B4
    2022.04.19 08:16:07
    2022-04-19 08:16:10
    1
    写A0信息
    PASS
    
    
  
';

-- 把字符串转换成XML格式 
SELECT  CAST(@XmlData AS XML) AS XMLFmt

-- 压缩字符中成 VARBINARY 二进制数据
SELECT  @CPSXmlData = COMPRESS(@XmlData);
SELECT  @CPSXmlData AS CompressData

-- 把压缩的字符串解压, 并转换成字符串
SELECT  CONVERT(NVARCHAR(MAX), DECOMPRESS(@CPSXmlData)) AS SourceStr
SQL