我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么为数据库事务日志减肥

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么为数据库事务日志减肥

这篇文章主要讲解了“怎么为数据库事务日志减肥”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么为数据库事务日志减肥”吧!

在大多数SQL Server的工作环境中,尤其是在OLTP环境中,数据库的事务日志性能出现瓶颈时往往会导致事务完成需要更多的时间,此时许多人把原因都归结于I/O子系统,理由是它不能够支撑工作负载产生的的大量的事务日志,然而实际情况却都未必如此。

事务日志写等待时间

对 于事务日志来讲,写操作等待的时间可以使用sys.dm_id_virtual_file_stats和系统中的事件writelog等待进行监视。如果 写等待时间比你期望的I/O子系统较高,那麽I/O子系统就不能够支撑,这是一般的假设,但不意味着需要升级你的I/O子系统。

在许多系统你是你会发现有相当比例的多余的日志记录的产生,如果能够减少这些不需要的日志记录,相应的也就减少了写入磁盘的事务日志的数量,也相应的转化为写等待时间的减少,因此也就减少了事务完成的时间。

引起多余日志记录的产生有两个主要的原因:

未被使用的nonclustered indexes

索引碎片的增多

未被使用的索引

无 论在任何时候向表中插入记录时,同时也会在该表上定义的每一个noncluster index插入一条记录(注意,filetered index有可能会例外 ),这就意味着多余的日志记录的产生;在表中删除记录也是同样的,在noncluster index相应的记录也必须被删除,而更新数据也会同样的对noncluster index中的记录进行修改。要保持每一个noncluster index和相关的表之间的正确关系(真实反映),这些操作是必要的,但是如果noncluster index在查询计划中未必使用,但为维护他们所产生的操作和日志记录也会是多余的费用,随着noncluster index碎片的增长,就需要定期的对他们进行维护,维护同样也会产生更多的日志记录也是完全不需要的。

未被 使用的索引有可能是你错误的在表上创建了一个索引,或者是按照SQL Server的丢失索引的DMV的建议创建的,或者是按照数据库的优化顾问创建的,也有可能是业务的改变导致原先使用的索引不再被使用。

无论如何,这些未被使用的索引都应该被清除以便减少负荷,首先要确定哪些索引是未被使用过的,可以通过sys.dm_db_index_usage_stats这个DMV来查看。

索引碎片

在许多人看来,索引碎片会导致要求读取更多的数据页,实际上索引碎片也会导致多余日志记录的产生而原因就在于产生碎片的原因。

碎片是由于页拆分page split这种现象的发生而导致的,简单的解释就是当插入记录而空间不足导致了页拆分,这种过程是这样子的:

一个新的索引被分配和格式化

从装满数据的页中移出一半的记录到新页

新页链接到索引结构中

新的记录被插入到页面中

这些所有的操作都会产生日志记录,你可以想象的到,要远比你插入一条记录所产生的日志记录要多。

减 少额外耗费的***步就是清除未被使用的索引,目的就是杜绝其再产生页拆分,所以要找出那些被分割成碎片的索引,第二步决定使用哪种碎片整理方法的是分析索 引以确定碎片程度。通过使用系统函数 sys.dm_db_index_physical_stats,您可以检测特定索引、表或索引视图的所有索引、数据库中所有索引或所有数据库中所有索引 中的碎片。对于已分区索引,sys.dm_db_index_physical_stats 还提供每个分区的碎片信息。SQL Server 2005 中计算碎片的算法比 SQL Server 2000 中的算法更精确。因此,碎片值显得更高。例如,在 SQL Server 2000 中,如果某表的页 11 和页 13 在同一区,而页 12 不在该区,则不会将该表视为碎片。但若要访问这两页,却需要两个物理 I/O 操作,因此在 SQL Server 2005 中,此表被计为碎片。使用索引填充因子重建或重新组织索引,以便在索引中保留部分空的空间为后续插入的记录使用,这样就减少了页拆分现象的发生,因而也就 减少了额外的日志记录的产生。(请参考另一篇文章:发现那些未被使用的数据库索引)

当 然,天下没有免费的午餐,任何对一方有利的东西对另一方可能就会有害。当使用填充因子fillfactors时会降低页面密度,过低的页面密度同样也会带 来一些性能问题,当然过高会带来页拆分,所以这是一个需要权衡的问题,具体要参考你的环境,比如说是OLTP还是OLAP等。

减少事务日志的写等待时间不总是要升级你的I/O子系统,在数据库中使用简单的索引分析,就能显著的减少大量的事务日志记录的产生,也就同样的减少写等待时间。

当然,这仅仅是影响事务日志性能的一个方面,只有对事务日志的机制有更深入的了解,你才会发现,和事务日志性能方面的问题的更多方面。

感谢各位的阅读,以上就是“怎么为数据库事务日志减肥”的内容了,经过本文的学习后,相信大家对怎么为数据库事务日志减肥这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么为数据库事务日志减肥

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle数据库日志怎么看

查看 oracle 数据库日志的方法如下:使用 alter system 或 alter session 命令启用即时跟踪会话。查询 v$log_history、v$logfile 或 v$log 视图。默认情况下,日志文件位于 $orac
oracle数据库日志怎么看
2024-05-11

MySQL INSERT锁与数据库事务日志的管理

在MySQL中,INSERT操作会涉及到表级锁以及数据库事务日志的管理。表级锁:在MySQL中,INSERT操作会获取表级锁,该锁会阻塞其他对该表的写操作(如UPDATE、DELETE操作),但不会阻塞读操作(如SELECT操作)。当多个
MySQL INSERT锁与数据库事务日志的管理
2024-08-14

mysql数据库日志怎么删除

要删除 mysql 数据库日志,有四种方法:1. 手动删除日志文件;2. 使用 mysqladmin 命令;3. 使用 mysql 命令;4. 编辑 mysql 配置文件。在删除日志文件之前,请确保已备份它们。如何删除 MySQL 数据库日
mysql数据库日志怎么删除
2024-08-05

怎么导出mysql数据库日志

通过以下步骤导出 mysql 数据库日志:确定日志文件位置。使用 mysqldump 命令导出日志文件(mysqldump --log-error=mysqld.err --all-databases > database_backup.s
怎么导出mysql数据库日志
2024-08-05

oracle数据库日志怎么查询

oracle数据库的日志信息可以通过以下方法查询:使用sql语句从v$log视图查询;使用logminer工具分析日志文件;使用alter system命令查看当前日志文件的状态;使用trace命令查看特定事件的信息;使用操作系统工具查看日
oracle数据库日志怎么查询
2024-04-08

mariadb怎么查看数据库日志

要查看MariaDB数据库的日志,可以使用以下方法之一:1、使用命令行工具:通过命令行登录到MariaDB数据库,然后使用以下命令查看日志:SHOW LOGS;这将列出可用的日志文件。然后使用以下命令查看特定日志文件的内容(例如,错误
mariadb怎么查看数据库日志
2024-04-09

mysql数据库怎么删除日志

通过以下方法可以删除 mysql 中的日志:使用 purge binary logs 语句删除所有二进制日志。使用 reset slave 语句删除从服务器上的二进制日志和中继日志。手动删除二进制日志和中继日志文件,但需确保备份重要数据并了
mysql数据库怎么删除日志
2024-08-05

sqlserver怎么收缩数据库日志

要收缩数据库日志文件,可以通过以下步骤在SQL Server中执行:使用以下命令查看当前数据库的日志文件大小和空闲空间:USE [YourDatabaseName]DBCC SQLPERF(LOGSPACE);使用以下命令执行日志文件收
sqlserver怎么收缩数据库日志
2024-04-09

怎么删除mysql数据库日志

可以通过以下步骤删除 mysql 数据库日志:删除二进制日志:使用 purge binary logs 命令,指定要删除的日志名称。关闭通用日志:在 mysql 配置文件中将 general_log 设置为 off,并重启服务。手动删除日志
怎么删除mysql数据库日志
2024-08-05

mysql数据库日志怎么导出

如何导出 mysql 数据库日志:确定日志文件位置(windows:%programdata%\mysql\mysql server \data\;linux/mac:/var/log/mysql/)使用 mysqldump 导出所有数据库
mysql数据库日志怎么导出
2024-08-05

oracle数据库日志怎么删除

在Oracle数据库中,可以通过以下步骤来删除日志文件:登录到Oracle数据库服务器上的SQL*Plus或者其他客户端工具中。使用以下语句查看当前的日志文件列表:SELECT * FROM V$LOG;确保没有任何进程正在使用要删除的日志
oracle数据库日志怎么删除
2024-04-12

oracle数据库归档日志怎么清除

要清除Oracle数据库的归档日志,可以按照以下步骤进行操作:首先,连接到Oracle数据库的服务器上,使用具有必要权限的用户登录。检查当前数据库的归档日志模式设置。可以使用以下命令查询:SELECT LOG_MODE FROM V$DA
oracle数据库归档日志怎么清除
2024-04-09

db2数据库日志路径怎么查看

要查看DB2数据库的日志路径,可以使用以下命令:登录到DB2数据库服务器的命令行界面。在命令行界面中输入以下命令来查看当前数据库的日志路径:db2 get db cfg for | grep -i logpa
db2数据库日志路径怎么查看
2024-04-08

怎么用PL/SQL分析数据库日志

在 PL/SQL 中分析数据库日志可以通过以下步骤实现:创建一个存储过程或函数来读取数据库日志文件。可以使用 UTL_FILE 包来读取文件内容。在存储过程或函数中编写逻辑来分析数据库日志。可以通过正则表达式或字符串处理函数来提取和分析需要
怎么用PL/SQL分析数据库日志
2024-05-08

编程热搜

目录