gpt4 book ai didi

mvc-mini-profiler - MiniProfiler SqlServerStorage 变得很慢

转载 作者:行者123 更新时间:2023-12-05 01:15:49 30 4
gpt4 key购买 nike

我们以两种方式使用迷你分析器:

  • 在带有弹出窗口的开发人员机器上
  • 在我们的暂存/生产环境中,SqlServerStorage 存储到 MS SQL

  • 几周后,我们发现写入分析数据库需要很长时间(几秒钟),并且会导致站点出现实际问题。截断所有分析器表可解决此问题。

    查看 SqlServerStorage 代码,似乎插入也进行了检查以确保具有该 id 的行不存在。这是为了确保数据库不可知代码吗?随着行数的增加,这似乎会带来巨大的惩罚。

    我将如何从性能分析器中消除性能损失?有没有其他人遇到这种减速?还是我们做错了什么?

    为任何帮助或建议干杯。

    最佳答案

    嗯,看来我犯了一个巨大的错误 MiniProfilers table当我忘记 primary key 时创建的默认情况下被聚簇......并且聚簇索引是一个 GUID 列,一个非常大的禁忌。

    因为数据以与聚集索引相同的顺序物理存储在磁盘上(实际上,可以说表就是聚集索引),SQL Server 必须按照该物理顺序保留每个新插入的行。当我们基本上使用随机数时,这将成为保持排序的噩梦。

    解决方法是添加一个自动增加的 int 并将主键切换到那个,就像 all the other tables (为什么我忽略了这一点,我不记得了……我们不在 Stack Overflow 上使用此存储提供程序,否则很久以前就会发现此问题)。

    我将更新表创建脚本,并为您提供一些用于迁移当前表的内容。

    编辑

    再看一遍,主MiniProfilers table 可能只是一个堆,这意味着没有聚集索引。所有对行的访问都由该 guid ID列,所以没有物理排序会有所帮助。

    如果您不想重新创建 MiniProfiler sql 表,您可以使用此脚本使主键非聚集:

    -- first remove the clustered index from the primary key
    declare @clusteredIndex varchar(50);

    select @clusteredIndex = name
    from sys.indexes
    where type_desc = 'CLUSTERED'
    and object_name(object_id) = 'MiniProfilers';

    exec ('alter table MiniProfilers drop constraint ' + @clusteredIndex);

    -- and then make it non-clustered
    alter table MiniProfilers add constraint
    PK_MiniProfilers primary key nonclustered (Id);

    另一个编辑

    好的,我已经更新了创建脚本并为大多数查询添加了索引 - see the code here in GitHub .

    我强烈建议删除所有现有表并重新运行更新后的脚本。

    关于mvc-mini-profiler - MiniProfiler SqlServerStorage 变得很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691597/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com