我们在SQL Server 2008数据库中使用单个表进行审核。
单表架构运行良好,查询简单,适应架构更改。
但它是整个数据库的主要瓶颈。所有INSERTS和UPDATES都必须通过审计表。
我们已经将NOLOCK HINT用于SELECT语句。
由于此表没有UPDATE,是否有任何改进INSERT语句吞吐量的建议?
答案 0 :(得分:4)
确保表上有INT(或BIGINT)IDENTITY主聚簇索引!并且最好没有其他指数(如果可能的话) - 那些会降低插入速度。
这是一个常见的误解,因为表只需要INSERT而几乎不需要任何读取,所以你应该“省去”自己主要的群集密钥的麻烦。
作为SQL Server索引的女神,Kimberly Tripp在她出色的博文The Clustered Index Debate continues中解释道:
群集中的插入速度更快 桌子(但只在“右边” 聚集表)比一个 堆。这里的主要问题是 在IAM / PFS中查找以确定 堆中的插入位置是 比集群表中的速度慢 (插入位置已知, 由聚簇键定义)。插入 插入表格时速度更快 定义顺序(CL)和位置 这个顺序不断增加。
所以正确聚簇索引可以加速插入,这里就意味着静态(永不改变),唯一,尽可能小(INT或BIGINT),最好是不断增加(没有页面)分裂,因此没有性能损失)。
此外,如果您的表只进行插入而没有更新/删除,则应确保在聚簇索引上使用100%FILLFACTOR来完全填充这些SQL服务器页面。
马克
答案 1 :(得分:2)
我要做的唯一建议是:
join
或union
“实时”和“较早”审核的视图。答案 2 :(得分:0)
如果您只是附加到审计表并运行将始终最终执行表扫描的报表,请考虑删除表中的任何索引。