小编mil*_*iCH的帖子

日志文件的并行GZip解压缩 - 为最高吞吐量调整MaxDegreeOfParallelism

我们每天最多有30 GB的GZip压缩日志文件.每个文件保存100.000行,压缩后为6到8 MB.解析逻辑已被剥离的简化代码利用Parallel.ForEach循环.

在两个NUMA节点上,MaxDegreeOfParallelism为8处理的最大行数达到峰值,32个逻辑CPU盒(Intel Xeon E7-2820 @ 2 GHz):

using System;

using System.Collections.Concurrent;

using System.Linq;
using System.IO;
using System.IO.Compression;

using System.Threading.Tasks;

namespace ParallelLineCount
{
    public class ScriptMain
    {
        static void Main(String[] args)
        {
            int    maxMaxDOP      = (args.Length > 0) ? Convert.ToInt16(args[0]) : 2;
            string fileLocation   = (args.Length > 1) ? args[1] : "C:\\Temp\\SomeFiles" ;
            string filePattern    = (args.Length > 1) ? args[2] : "*2012-10-30.*.gz";
            string fileNamePrefix = (args.Length > 1) ? args[3] : "LineCounts";

            Console.WriteLine("Start:                 {0}", DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"));
            Console.WriteLine("Processing file(s):    {0}", …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing performance multithreading c#-4.0

14
推荐指数
1
解决办法
1663
查看次数

T-SQL.程序调用文本

我正在尝试为我的存储过程实现通用日志记录.我找到的最佳解决方案是使用DBCC INPUTBUFFER,它返回过程调用的文本,如:

DECLARE @a INT
SET @a = 1000
EXEC usp_Test @param = @a
Run Code Online (Sandbox Code Playgroud)

但它有一个限制,这个缓冲区的最大长度是4000.我有很多具有表值参数的过程,并且它们通常包含> 10000条记录,所以我不能用这种方法记录这个调用.

有没有办法实现这样的日志记录,而无需在每个过程中手动创建"过程调用文本"?

t-sql sql-server logging stored-procedures

9
推荐指数
1
解决办法
995
查看次数

从 SQL Server 的 XML 执行计划中提取数据

我的最终目标是从缓存的执行计划中自动提取所有引用的列。这将帮助我们跟踪我们预定的 SSRS 报告集使用的所有列。

感兴趣的 XML 数据如下所示:

<ColumnReference Database="[AdventureWorksDW2012]" Schema="[dbo]" Table="[DimCustomer]"  Alias="[dC]" Column="HouseOwnerFlag" />
Run Code Online (Sandbox Code Playgroud)

我想在表中存储数据库、架构、表、别名和列值。

但是,为了概念验证,我进行了一个简单的查询,并将完整执行计划的以下部分复制到下面的 TSQL 代码中:

DECLARE @myDoc xml;
SET     @myDoc = '<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan"  Version="1.2" Build="11.0.3381.0"  TEST="1">
    <BatchSequence>
      <Batch>
        <Statements>
          <StmtSimple StatementText="SELECT ... &#xD;&#xA;" StatementId="1" StatementCompId="1" ThereIsMoreHere="..." >
            <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" ThereIsMoreHere="..." />
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>';

SELECT StatementId = @myDoc.value('(/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/@StatementId)[1]', 'int');
SELECT StatementId = @myDoc.value('(/ShowPlanXML/@TEST)[1]',                                     'int');
Run Code Online (Sandbox Code Playgroud)

两个 SELECT 语句都返回 NULL。这里有什么问题?我觉得我正在慢慢失明。这是针对 SQL Server 2012 SP1 Developers 版本执行的。

xml t-sql sql-server sql-execution-plan

4
推荐指数
2
解决办法
4408
查看次数