Paul撰写的有关备份内部的文章非常出色,您必须阅读。添加他人的意见并强调您问题的特定部分
我还听说备份是单线程的,这意味着它仅使用一个核心,假设您备份到单个文件。还要假设您有一台多核计算机,例如16个核,或者至少有一个比一个大得多的核。
备份操作,can use parallelism
但请记住,这不是 SQL Server中Optimizer驱动的并行性,它不是由备份要读取的数据文件,备份要写入的数据文件和创建的备份文件数量所涉及的磁盘数量驱动的。
MAXDOP
进行SQL Server备份时无法使用提示
您无法在SSMS中为简单的TSQL备份操作生成执行计划。
由于备份操作不涉及任何运算符,因此SQL Server中查询优化器驱动的并行性基本上是针对所涉及的运算符的(实际上它更为复杂,但为简单起见,您可以采用此方式),因为备份操作不涉及任何运算符,因此它无法使用优化器驱动的并行度。
我在Technet Wiki上写了一篇有关备份和并行性的文章,其中使用简单的示例解释了SQL Server备份期间的并行性。以下是结论
如果数据库文件位于多个磁盘上,则将在每个设备驱动器的线程上启动备份操作以读取数据。同样,如果在多个驱动器/安装点上完成还原,则备份操作将为每个驱动器/安装点启动一个线程
即使您将备份的多个副本转储到同一驱动器上,我们也会为每个备份文件转储一个线程。
与备份关联的并行性与条带有关。每个条带都有其自己的工作线程,这实际上是备份/还原中应视为并行操作的唯一部分。
最大并行度对备份操作没有影响。
我从Paul和Bob Dorr那里得到了一些专家意见。
那么当备份作业运行时会发生什么呢?而且不同版本之间也存在显着差异吗?例如2008、2012和2014(不是许可)。
我建议您阅读Bob Dorr 撰写的blog.msdn文章。他强调的一些重点是
备份启动时,它将创建一系列缓冲区,这些缓冲区是从缓冲池外部的内存分配的。每个缓冲区的目标通常为4MB,导致大约4到8个缓冲区。有关计算的详细信息位于:http : //support.microsoft.com/kb/904804/en-us
缓冲区在空闲队列和数据队列之间转换。读取器拉出一个空闲缓冲区,将其填充数据并将其放置在数据队列中。编写器从数据队列中提取已填充的数据缓冲区,处理该缓冲区并将其返回到空闲列表。
每个备份设备都有一个写入器,每个写入器都从数据队列中检索。因此,具有磁盘规格的四(4)的备份命令将具有四个写入器和一个读取器。读取器使用异步I / O,因此可以与写入器保持同步。
您可以启用trace flags 3213 and 3605
,两者都未记录,因此请在测试环境中使用它,并查看在SQL Server错误日志中转储了哪些有趣的消息。将会出现类似下面的内容
Memory limit: 249MB
BufferCount: 7
Sets Of Buffers: 1
MaxTransferSize: 1024 KB
Min MaxTransferSize: 64 KB
Total buffer space: 7 MB
Tabular data device count: 1
Fulltext data device count: 0
Filestream device count: 0
TXF device count: 0
Filesystem i/o alignment: 512
Media Buffer count: 7
Media Buffer size: 1024KB
我不知道各种版本的备份代码有任何重大变化,此类情况未记录在案。我只知道SQL Server 2012 SP1 Cumulative Update 2,
使用TSQL或SMO从SQL Server的Windows Azure Blob存储服务启用备份和还原中引入的增强功能。在这里阅读