日志表设计优化与实现

摘要

这篇文章从日志表问题引入、日志表的共有特性、日志表的设计需求、设计思路以及设计详细实现的角度,阐述了在SQL Server数据库中如何最优化设计日志表来降低系统资源的占用和提高系统吞吐量。

问题引入

在平时与客户服务与交流过程中,我们不止一次的被客人问及这样的场景:我们现在面临如何设计SQL Server日志表方案,如何最优化设计数据库日志记录表。因为,日志表设计会面对如下问题:

表记录数大:日志表由于记录了应用程序的很多操作日志,有的业务有很多步骤,甚至每个步骤操作都会被记录到日志表中,所以通常日志记录表都很大,表记录数据很多,表空间占用很大。

事务操作频繁:由于日志记录表写入(INSERT)操作非常频繁,加之表变得很大,通常的做法是会删除过期的日志信息(DELETE),所以事务操作非常频繁。

占用了昂贵的IOPS资源:日志表原本写入操作就非常频繁了,加之需要删除过时数据操作,这一写一删操作,使得事务量加倍,导致了数据库系统IOPS资源的过度被日志表的操作所占用了。

吞吐量上不去:日志表事务操作频繁,如果删除操作的事务没有控制好(比如:我见过很多客人一个DELETE语句下去删掉几十、几百万记录数的操作),很有可能会导致锁等待的发生(Blocking),从而影响应用的吞吐量和并发能能力。

日志表设计面临的这一系列问题给我们设计带来了不小的挑战,而我们今天这篇文章就是要解决日志表设计面临的这些问题。这篇文章将会分享SQL Server日志表设计的优化方案以及方案的实现细节,聪明的你甚至可以将这个设计方案推广到其他的关系型数据库。

日志表特性

首先,在分享设计方案之前,我们来看看关系型数据中的日志表,具有哪些共同的特性:

事务特性

日志表最为明显的特性是事务特性,或者称之为最重要的特性也不为过,即:写多读少,再准确一点说,是INSERT或者DELETE操作多;SELECT或者UPDATE操作少,这个很好理解。

INSERT操作:INSERT操作是记录日志信息,当然是非常频繁且是少不了的,几乎是每时每刻都在发生。对系统吞吐量和并发

你可能感兴趣的:(MySQL)