Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL Server 最小化日志操作解析,应用

SQL Server 最小化日志操作解析,应用

作者头像
全栈程序员站长
发布于 2022-07-20 05:00:23
发布于 2022-07-20 05:00:23
6210
举报

大家好,又见面了,我是全栈君。

最小化日志

概念:SQL Server在满足相应条件的基础上时进行一些特定的操作如Rebuild Index时会进行最小化Tran Log记录操作,从而改善系统性能.

注意:含最小化操作日志操作段日志无法按时间点恢复(point in time)

需要还原模式为简单或大容量日志

最小化日志的操作

Create Index,Alter Index Rebulid

Bulk import操作(BCP,Bulk insert)

Select into

Blob数据操作(使用Write等)

Insert select(sql 2008后特定条件下可以)

Merge(特定条件)

应用:实际应用过程中我们实际使用insert select的时候居多,就此介绍

关于insert select操作的最小化日志

聚集表

当聚集表为空时,使用TABLOCK 锁提示将会最小化日志

当聚集表非空时,无论如何将不会最小化日志

非聚集表

当堆表为空时,使用TABLOCK锁提示,表中行数据,索引数据(非聚集索引)都会最小化日志

当堆表非空时,使用TABLOCK锁提示,表中存在非聚集索引,则行数据,索引数据均非最小化日志

注:表非复制表

一些文档中在堆表有索引非空的情况认为堆行数据会最小化日志,实际是错误的.见图b-2中说明

聚集表实例

聚集空最小化日志 图a-1

create database testbulk

go

use master

ALTER DATABASE [testbulk] SET RECOVERY BULK_LOGGED WITH NO_WAIT

go

use testbulk

go

create table t1(id int not null identity (1,1),dystr varchar(200),fixstr char(500));

go

set nocount on

declare @i int

set @i=0

while(@i<20000)

begin

insert into t1(dystr,fixstr)values(‘aaa’+str(RAND()*100000000),‘bbb’+str(RAND()*100000000))

set @i=@i+1

end

create table tcls

(

id int ,

dystr varchar(200),

fixstr char(500)

)

go

CREATE UNIQUE CLUSTERED INDEX inx_id ON dbo.tcls (id)

insert into dbo.tcls with(tablockx)

select * from dbo.t1 —-cluster table empty

select operation,CONTEXT,[Log Record Length],AllocUnitName from fn_dblog(null,null)

where AllocUnitName like ‘%tcls%’

图a-1

聚集非空非最小化日志图a-2

truncate table tcls

DBCC SHRINKFILE (N’testbulk_log’ , 0, TRUNCATEONLY)

insert into dbo.tcls with(tablockx) values (100000,‘aaa’,‘bbb’)—-made not empty clustered table

go

insert into dbo.tcls with(tablockx)

select * from dbo.t1

—-cluster table not empty

select operation,CONTEXT,[Log Record Length],AllocUnitName from fn_dblog(null,null)

where AllocUnitName like ‘%tcls%’

图a-2

非聚集索引实例

非聚集非空堆表无索引实例 图b-1

create table tnoncls

(

id int ,

dystr varchar(200),

fixstr char(500)

)

go

insert into dbo.tnoncls with(tablockx) values (100000,‘aaa’,‘bbb’)—-made not empty heap table no index

go

insert into dbo.tnoncls with(tablockx)

select * from dbo.t1 with(tablockx)—-heap table not empty with no index

select operation,CONTEXT,[Log Record Length],AllocUnitName from fn_dblog(null,null)

where AllocUnitName like ‘%tnoncls%’

图b-1

非聚集非空堆表含索引实例 图b-2

truncate table tnoncls—-truncate table

DBCC SHRINKFILE (N’testbulk_log’ , 0, TRUNCATEONLY)

CREATE UNIQUE NONCLUSTERED INDEX inx_id ON dbo.tnoncls (id)—-add non clustered index

insert into dbo.tnoncls with(tablockx) values (100000,‘aaa’,‘bbb’)—-made not empty heap table with index

go

insert into dbo.tnoncls with(tablockx)

select * from dbo.t1 with(tablockx)—-heap table not empty with index

select operation,CONTEXT,[Log Record Length],AllocUnitName from fn_dblog(null,null)

where AllocUnitName like ‘%tnoncls%’—-both datapage and indexpage full log

图b-2

关于trace flag 610

Sql2008新引进的TF,用于非空B-tree结构中仍可最小化日志操作.

关于TF610的使用我个人建议是特殊场景谨慎使用.

一般来说我们在对非空表导入数据的场景,堆表在Online的过程中最小化日志锁表本身就会影响线上的应用.聚集表数据在插入过程中批量导入的可能性又极低.(好好的聚集表数据批量导入,情况甚微).

TF610本身是为了减少记录的tran-log大小而设计,并非加快导入而设计.

使用时注意:

1:特定情况下session级打开 dbcc traceon(610)

2:当批量事务提交时所有数据页需落盘,如果此之前没有检查点执行落盘会带来大量的随机IO从而导致性能下降,有时甚至不如全日志记录的插入.

3:避免单个事务过大.超大事务可能导致其他问题.

最小化日志(Minimal Log)最佳实践

BULK_LOGGED模式:现实生产环境中的数据库一般是简单,或者全日志. BULK_LOGGED模式使用常态下寥寥无几.但当我们的数据操作中存在大量可最小化的日志操作中(如索引重建维护)我们可以开启BULK_LOGGED模式从而提高操作效率.

例:索引维护

1:选取操作时间窗口:日常全备份前

2:全备份完成后,人工干预执行一次日志备份.

3:修改数据库模式由Full->BULK_LOGGED

4:大容量日志操作(索引维护)

5:人工干预备份日志

6:重新调整为全日志(模式)

BULK_LOGGED模式下是不会破坏日志链,在这样的模式下我们把Non point time的时间段降到了最低.

注:当数据库有应用全日志模式的情况下,如镜像,不宜修改的数据库模式而破坏应用,当全日志情形下产生的大量日志可能导致实例级的全局问题,应仔细权衡操作.

对有审计需求的数据库来说,注意具体审计需求:是否需要恢复到时间点.

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/108200.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年3月6,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
域名解析填写指南:主机记录、记录值、IPv6和DNS填写方法
需要注意的是,根据不同的主机服务商,可能会有特定的要求和介绍,可以在服务器管理平台查看更多信息。
很酷的站长
2023/10/07
7.2K0
域名解析填写指南:主机记录、记录值、IPv6和DNS填写方法
网站被墙!如何设置域名解析?
背景: 今天因网站所使用的 IP 被墙 ( 什么是IP 被墙 ? 请看文章后面), 然后运营商给我换了一个IP. 因此就需要重新设置域名解析,需要将域名指向新的IP地址 (今天居然在域名的解析的问题上
用户9914333
2022/07/22
15.4K0
网站被墙!如何设置域名解析?
域名解析
以下内容将详细介绍如何设置域名解析。在开始配置解析之前,你需要提前完成域名注册和云服务器购买。
无代码Dev
2024/01/28
3.8K0
域名解析
一般如何将域名解析到ip?域名解析后需要多久才能生效?
在购买了域名之后,首先要做的就是域名解析,在进行域名解析后,才能够有效建立域名和ip之间的稳定联系,对于没有经验的使用者来说,一般如何将域名解析到ip呢?在进行域名解析后多久才能生效呢?
用户8739990
2021/08/13
15.4K0
腾讯云服务器域名解析教程 ?
步骤1:添加记录 登录 腾讯云 DNS 解析控制台。 在 “域名解析列表” 中,可查看全部已添加的域名。如下图所示: 说明: 若您的域名已在腾讯云注册,则默认添加到 DNS 解析列表。 若您需添加解析的域名未在腾讯云注册,请单击【添加域名】,在弹出的窗口中,根据实际需求,填写您需要解析的域名。 图片 在 “域名解析列表” 中,选择需要解析的域名行,单击【解析】。 在 “记录管理” 页签中,可以通过单击【快速添加网站/邮箱解析】添加解析记录。 注意: 快速添加网站解析将为您添加两条 A 记录,主机记
青梅煮码
2023/01/16
34.4K0
腾讯云服务器域名解析教程 ?
DNS域名解析中各项记录值的含义及遇到的一些问题
域名解析就是域名到IP地址的转换过程,域名的解析工作由DNS服务器完成。DNS服务器会把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。域名解析时会添加解析记录,这些记录有:A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发。
德顺
2019/11/13
6.5K0
什么是二级域名 二级域名怎么弄
很多人对一级域名和二级域名的概念不是很清楚。那么什么是二级域名?二级域名怎么弄呢?今天小编就为大家介绍一下关于一级域名和二级域名的相关信息。
用户8739990
2021/07/23
35.5K1
什么是二级域名 二级域名怎么弄
域名解析失败什么意思 域名到哪里购买比较靠谱
随着互联网的进步,传统企业也开始走上了搭建网站的道路,搭建网站的意义就是建立企业的形象,让客户从网站中了解都企业的观念与文化,还能知道企业产品中的优势,从而提高成交率。创建网站域名是必不可少的,但依旧会在创建网站中遇到一些问题,下面就给大家讲讲域名解析失败什么意思?
用户8715145
2021/08/20
4.5K0
怎么弄二级域名?二级域名什么意思?
在这个网络发达的时代,几乎所有人都学会了上网,而网站也成为了大家每天需要接触的对象。网站是分个人网站和企业网站的,很多人看别人拥有属于自己的网站心痒痒,其实建立网站挺简单的,第一步就是注册域名。当你购买一个主域名之后可以生成无数个二级域名。很多朋友只完成了第一步却不清楚怎么弄二级域名,所以下面就让我来给大家简单讲讲。
用户8739990
2021/08/06
29.4K1
怎么弄二级域名?二级域名什么意思?
域名如何解析 建一个网站大概要花多少钱
说到域名,大家可能还不知道,域名还没出现的时候,用户想要访问网站,还得输入一连串的IP地址才能访问,这一连串数字很难让用户记住,十分的不方便。随着科技的进步,IP地址访问转换成域名访问,域名都是与IP值相应的,所以不用怕出什么问题,但域名在访问之前是需要做解析的。下面就给大家介绍域名如何解析?
用户8739990
2021/08/06
4K0
域名如何解析 建一个网站大概要花多少钱
域名解析是什么?域名无法解析该怎么办?
相信很多从事网站开发的人对域名解析这个词并不陌生,域名解析还可以分成域名静态解析、动态解析等。它的整个过程就是将域名转换成一种方便让人访问的IP地址,域名解析是互联网不可分割的一部分。接下来就跟小编一起看看域名解析是什么?域名无法解析该怎么办?
用户8739990
2021/07/12
11.5K0
域名解析是什么?域名无法解析该怎么办?
内网私有域名解析
  大家可能知道,在网络被发明出来之后一段时间,大家采用 IP + Port 的方式一起共享资源。后来随着资源越来越多,这样一种方式显得非常不友好。比如说,现在有 254 个 IP,每个 IP 上有 20 个 Web 应用,那么我们就必须记住 5080 个 IP + Port 的组合,简直太折磨人了。于是在 1983 年,保罗・莫卡派乔斯发明了域名解析服务和域名服务(DNS,Domain Name System)。从此以后,大家开始用域名来访问各种各样的应用服务。显然,相比原来 IP + Port 的方式,域名的含义更加具象、更容易被人记住。
zhonger
2022/10/28
9.5K0
内网私有域名解析
怎么做域名解析?域名解析是什么意思?
随着互联网网站技术越发成熟,许多个人、企业、机构等开始建立网站,但是,他们很多对网站和域名有误解,以为把网站搭建好,不用进行域名解析,网络用户就可以访问网站,等到了网站正式上线,就会发现无法访问该网站。所以,在建立网站前,我们有必要先了解下怎么做域名解析?域名解析是什么意思?
用户8739990
2021/08/06
18.6K0
怎么做域名解析?域名解析是什么意思?
域名、解析、证书、备案等产品常见问题
腾讯云将于 9.1 起支持APP备案,详情请查看:https://cloud.tencent.com/announce/detail/1971
Im小泽
2022/04/27
21.1K0
中文域名怎么解析?什么是域名解析?
在上网的过程中经常会使用到域名,而域名除了我们常见的英文域名以外,其实还有中文域名。只是很多人在注册域名的时候都会选择英文域名,因为英文域名更加通用,所有的浏览器都能够打开。而想要打开中文域名的网站则需要费一番心思。一般情况对英文域名解析是十分便利的,而中文域名怎么解析很多朋友不清楚,所以下面就给大家介绍一下。
用户8739990
2021/08/06
21.9K0
中文域名怎么解析?什么是域名解析?
腾讯云域名解析教程_腾讯云购买的域名如何解析IP地址
在2019年建网站的步骤和过程一文里面,奶爸给大家说的建网站第一步就是注册域名,那么如果你是在腾讯云注册的域名,注册完毕后怎么解析到自己的网站服务器的IP地址呢?本文就通过图文教程给大家介绍如何在腾讯云进行域名解析。
奶爸建站笔记
2019/10/10
60.2K0
GoDaddy设置DNS绑定主机以及添加A记录域名解析完整过程
不论我们在哪家域名注册商购买域名,我们如果需要搭建网站就需要用到解析域名至主机IP的操作。比如我们在Godaddy注册域名之后,很多用户不会操作Godaddy域名解析的设置,因为后台界面是英文以及面板不是我们熟悉的界面,尤其是新手用户可能不知如何解决,网上搜索出来的很多教程都是过期的,因为Godaddy经过多次的改版目前的界面比较新。
老蒋
2021/12/24
17.4K0
GoDaddy设置DNS绑定主机以及添加A记录域名解析完整过程
Cloudflare域名解析
域名解析是一种服务,通过将域名映射到特定的网站服务器IP地址,使得用户能够通过注册的域名轻松访问网站。这项工作由DNS服务器来执行。Cloudflare是一个知名的云服务提供商,提供DNS解析服务以及其他网络性能优化和安全服务。如果你不知道如何注册一个域名,可以参考《域名注册》这篇文章。
无代码Dev
2024/03/01
4.9K0
Cloudflare域名解析
域名解析和cdn 原理
用户访问未使用CDN缓存网站的过程为:  1)、用户向浏览器提供要访问的域名;  2)、浏览器调运维
Java架构师必看
2021/03/22
3.1K0
网站建设dns解析设置 dns出现解析错误怎么办
现在大家搭建网站已经越来越简单,只要企业对网站的框架没有过多的要求,直接到网上找个模板进行套用,然后再修改一下信息就可以了,快速又简单。但有些小白在搭建网站的时候,总会遇到一系列的问题发生,比如网站建设dns解析设置,就有很多人不太懂,现在就以这个问题简单介绍一下。
用户8715145
2021/12/11
27.3K0
推荐阅读
相关推荐
域名解析填写指南:主机记录、记录值、IPv6和DNS填写方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档