AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 259951
Accepted
Nicholas McQuillen
Nicholas McQuillen
Asked: 2020-02-19 10:50:45 +0800 CST2020-02-19 10:50:45 +0800 CST 2020-02-19 10:50:45 +0800 CST

Azure IaaS VM - 将 D:\ 驱动器用于 tempdb - NTFS 格式化 64k

  • 772

这是我今天早些时候遇到的一个问题,最终找到了答案。不介意更好的东西,但想把它提供给同样需要的人。

首先,在 Azure VM 上,您可以免费获得一个 D:\ 驱动器,即 SSD。需要注意的是,它通常会在 VM 重新启动时被破坏。高写入量的 MS 最佳实践是将此驱动器用于 tempdb。他们没有进入的是它没有格式化为 64kb。隐藏的 pagefile.sys 位于此处,因此如果您尝试重新格式化(它会失败),您需要考虑到这一点。

从这里: https ://cloudblogs.microsoft.com/sqlserver/2014/09/25/using-ssds-in-azure-vms-to-store-sql-server-tempdb-and-buffer-pool-extensions/

您需要将他们的启动 powershell 脚本更改为更像下面的内容,我首先完全删除页面文件,然后格式化为 64k,按照脚本通常的方式创建文件,然后在启动之前将 pagefile.sys 放回原处启动服务。

$SQLService=”SQL Server (MSSQLSERVER)”
$SQLAgentService=”SQL Server Agent (MSSQLSERVER)”
$tempfolder=”D:\SQLTEMP”
if (!(test-path -path $tempfolder)) {
    (Get-WmiObject -Class Win32_PageFileSetting).Delete() 
    Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage"  -Confirm:$false
    New-Item -ItemType directory -Path $tempfolder
    Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = 'D:\pagefile.sys';} 
}
Start-Service $SQLService
Start-Service $SQLAgentService

有没有人有更好的或在这个过程中看到任何漏洞?

为了给其他人更多的自动化/帮助,我还编写了上面的脚本以及创建它的触发器,并在启动后使用下面的 30 秒运行它。这基本上允许某人自动执行我参考的 cloudblogs 文章中的步骤。

#1 - Set Services to manual startup so that windows scheduler will start after tempdb adjusted
Set-Service -Name MSSQLSERVER -StartupType Manual
Set-Service -Name SQLSERVERAGENT -StartupType Manual
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Set-Service -Name MsDtsServer130 -StartupType Manual
}

<#2 - using below powershell script to create the startup script#>
$script=
'
$SQLService="SQL Server (MSSQLSERVER)"
$SQLAgentService="SQL Server Agent (MSSQLSERVER)"
$tempfolder="D:\SQLTEMP"
if (!(test-path -path $tempfolder)) {
    (Get-WmiObject -Class Win32_PageFileSetting).Delete() 
    Format-Volume -DriveLetter D -FileSystem NTFS -AllocationUnitSize 65536 -NewFileSystemLabel "Temporary Storage"  -Confirm:$false
    New-Item -ItemType directory -Path $tempfolder
    Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{ Name = "D:\pagefile.sys";} 
}
Start-Service $SQLService
Start-Service $SQLAgentService
IF (Get-Service MsDtsServer130 -ErrorAction SilentlyContinue)
{
Start-Service -Name MsDtsServer130
}
'

Out-File -FilePath C:\SQL-startup.ps1 -InputObject $script -NoClobber


<#3 - using below script to create a scheduled task to call a powershell script that creates a folder on the d drive.#>
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
Register-ScheduledJob -Trigger $trigger -FilePath C:\SQL-startup.ps1 -Name CreateSqlFolderOnDSsd

**编辑,上面假设 SQL 2016 和至少 powershell 5(虽然我不知道具体的依赖关系,但至少应该在 v4 上工作)。

sql-server azure-vm
  • 1 1 个回答
  • 657 Views

1 个回答

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2020-02-19T12:55:09+08:002020-02-19T12:55:09+08:00

    有没有人有更好的或在这个过程中看到任何漏洞?

    至于漏洞,博客文章包含几个漏洞,但您的脚本似乎堵住了漏洞。

    至于更好的方面,本地 SSD 暂存驱动器上的 TempDB 现在可以开箱即用地用于 Azure VM 上的 SQL Server,以及用于数据和日志的单独存储池。这是 Azure 门户中存储配置窗格的屏幕截图:

    在此处输入图像描述

    虚拟机驱动器将被格式化如下:

    PS C:\> Get-Volume  | Format-List AllocationUnitSize, FileSystemLabel
    
    
    AllocationUnitSize : 4096
    FileSystemLabel    : Temporary Storage
    
    AllocationUnitSize : 65536
    FileSystemLabel    : SQLVMLOG
    
    AllocationUnitSize : 65536
    FileSystemLabel    : SQLVMDATA1
    
    AllocationUnitSize : 0
    FileSystemLabel    :
    
    AllocationUnitSize : 0
    FileSystemLabel    :
    
    AllocationUnitSize : 4096
    FileSystemLabel    : System Reserved
    
    AllocationUnitSize : 4096
    FileSystemLabel    : Windows
    

    此处为 TempDb 使用 64KB 分配单元大小的建议可能仅适用于 TempDb 位于远程存储上而不是本地 NVMe 闪存盘上的情况,并且在任何情况下都不会对性能产生很大影响。

    • 6

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve