Gần đây, Erin Stellato (@erinstellato) đã viết blog về tác động hiệu suất Khởi tạo tệp tức thì (IFI) có thể có khi tạo hoặc khôi phục cơ sở dữ liệu. Cô ấy giải thích rằng thiết lập SQL Server 2016 hiện cung cấp cho bạn khả năng cấp các quyền thích hợp cho dịch vụ SQL Server trong quá trình cài đặt (chúng tôi cũng đã nói về điều này trong phần CTP 3.0 của Bản dựng mới nhất của SQL Server 2016):
Bây giờ bạn có thể bật Khởi tạo tệp tức thì trong khi thiết lập SQL Server
Chìa khóa là một tùy chọn mới (bạn cũng có thể chỉ định trong tệp cấu hình):
SQLSVCINSTANTFILEINIT ="Đúng | Sai"Thật tuyệt khi bạn thực sự có thể giảm lượng thời gian cần thiết để tạo hoặc khôi phục cơ sở dữ liệu sau này mà không cần phải nhớ truy cập gpedit, gán quyền chính xác và khởi động lại dịch vụ. Nhưng lợi ích lớn hơn nhiều đối với tôi là khả năng định cấu hình các tệp tempdb lớn hơn trong quá trình thiết lập, tận dụng sớm lợi thế của IFI.
Bây giờ, có một số giới hạn trong quá trình thiết lập; ví dụ:số lượng tệp tempdb được giới hạn ở 8 (hoặc số lõi, tùy theo số nào nhỏ hơn) và kích thước của mỗi tệp chỉ có thể đạt tối đa 1.024 MB. Các giới hạn này được thực thi trong giao diện người dùng và tôi nghĩ rằng tôi có thể vượt qua chúng bằng cách chỉ định kích thước cao hơn trong tệp cấu hình cho cài đặt không cần giám sát, nhưng điều đó cũng không hoạt động. (Nhật ký cho biết:"Giá trị 8192 cho kích thước tệp TempDB vượt quá 1024 MB và có thể ảnh hưởng đến thời gian cài đặt. Bạn có thể đặt nó thành kích thước nhỏ hơn và thay đổi nó sau khi cài đặt.") Cá nhân tôi nghĩ rằng ngày nay và tuổi, với tốc độ và kích thước của bộ nhớ mà chúng tôi có thể có được, giới hạn 1 GB trên kích thước tệp dữ liệu là thấp một cách giả tạo. Vì vậy, tôi đã gửi đề xuất Connect:
- Connect # 2457759:tệp dữ liệu tempdb không được giới hạn ở 1024 MB
Và sau đó, người ta chỉ ra rằng Brent Ozar (@BrentO) đã nộp một mặt hàng tương tự trước đó trong chu kỳ CTP, khi giới hạn thực sự được thực thi là 256 MB thay vì 1 GB:
- Kết nối # 1841076:Kích thước ban đầu thiết lập TempDB quá thấp
Tôi không có bất kỳ máy quái vật nào có thể hỗ trợ các tệp 64 x 1 GB và đó cũng không phải là một thử nghiệm thực tế, vì vậy tôi quyết định kiểm tra tác động của IFI trên 8 tệp dữ liệu tempdb, mỗi tệp 1 GB. Tôi thuộc loại cũ, vì vậy tôi đã tạo bốn tệp .ini khác nhau và tôi đã đánh dấu những dòng tôi sẽ thay đổi cho mỗi lần kiểm tra (Tôi muốn cài đặt cơ bản tối thiểu với các tệp dữ liệu 4 x 8 MB, sử dụng IFI và không, và sau đó so sánh nó với các tệp 8 x 1,024 MB). Vì tôi sẽ chạy các vòng lặp này nhiều lần, điều quan trọng là phải sử dụng các tên phiên bản khác nhau tùy thuộc vào việc IFI có được bật hay không, bởi vì khi bạn cấp quyền cho tài khoản dịch vụ, nó sẽ không bị lấy đi chỉ bằng cách xóa phiên bản đó. (và tôi có thể đã thiết lập các tài khoản đó một cách độc lập, nhưng tôi muốn làm cho các thử nghiệm này dễ dàng sao chép lại).
; Tệp cấu hình SQL Server 2016 RC0[OPTIONS]
ACTION ="Cài đặt"
ENU ="True"
QUIET ="True"
QUIETSIMPLE ="False"
UpdateEnabled ="False"
ERRORREPORTING ="False"
USEMICROSOFTUPDATE ="False"
FEATURES =SQLENGINE
HELP ="False"
INDICATEPROGRESS =" Sai "
INSTALLSHAREDDIR =" C:\ Program Files \ Microsoft SQL Server "
INSTALLSHAREDWOWDIR =" C:\ Program Files (x86) \ Microsoft SQL Server "
INSTANCENAME =" ABTESTIFI_ON "
INSTANCEID ="ABTESTIFI_ON"
SQLTELSVCSTARTUPTYPE ="Đã tắt"
INSTANCEDIR ="C:\ Program Files \ Microsoft SQL Server"
AGTSVCACCOUNT ="NT Authority \ System"
AGTSVCSTARTUPTYPE ="Thủ công"
SQLSVCSTARTUPTYPE ="Thủ công"
SQLCOLLATION ="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT ="NT Service \ MSSQL $ ABTESTIFI_ON"
; Đúng cho IFI =BẬT, Sai cho TẮT :
SQLSVCINSTANTFILEINIT ="False"
SQLSYSADMINACCOUNTS ="NT Authority \ System"
SQLTEMPDBFILECOUNT ="8"
; 1024 cho tổng 8 GB, 8 cho tổng 64 MB:
SQLTEMPD BFILESIZE ="1024"
SQLTEMPDBFILEGROWTH ="64"
SQLTEMPDBLOGFILESIZE ="8"
SQLTEMPDBLOGFILEGROWTH ="64"
BROWSERSVCSTARTUPTYPE ="Thủ công"
Và đây là tệp loạt mà tôi đã sử dụng (được đặt trong cùng thư mục với tệp cấu hình), tệp này đã cài đặt và sau đó gỡ cài đặt phiên bản bằng cách sử dụng từng tổ hợp ba lần và ghi lại thời gian thiết lập vào tệp văn bản - bỏ qua việc gỡ cài đặt và dọn dẹp.
echo Bắt đầu kiểm tra…@echo off 2> nul
setlocal enableelayedexpansion
set outputfile =time.txt
echo.>% outputfile%
rem Xóa Tám và / hoặc Mười sáu nếu bạn chỉ có 4 lõi!
FOR %% e IN (Đường cơ sở Bốn Tám Mười sáu) DO (
FOR %% x IN (IFI_ON IFI_OFF) DO (
FOR / L %% A IN (1,1,3) DO (
echo INSERT #x VALUES ('%% e', '%% x', '! TIME! ',>>% outputfile%
D:\ setup.exe / Q / IACCEPTSQLSERVERLICENSETERMS /ConfigurationFile=%%e_%%x.ini
echo'! TIME! '^)>>% outputfile%
D:\ setup.exe / Q / ACTION =UNINSTALL / INSTANCENAME =ABTEST %% x / FEATURES =SQL
rem del / Q / S "C:\ Program Files \ Microsoft SQL Server \ MSSQL13.ABTEST %% x \ *. * "
rem rd / Q / S" C:\ Program Files \ Microsoft SQL Server \ MSSQL13.ABTEST %% x \ "
)
)
)
@echo trên
echo… kiểm tra xong.
Một số lưu ý:
- Bạn có thể cần thay đổi hai dòng từ
D:\setup.exe
đến đường dẫn đến thư mục thiết lập. - Bạn có thể cần phải khởi động lại hệ thống của mình trước khi chạy.
- Bạn sẽ muốn chạy tệp loạt từ một dấu nhắc lệnh nâng cao để UAC không làm gián đoạn bạn trong mỗi lần lặp lại.
Tôi đã chạy thử nghiệm trên ba hệ thống khác nhau:
- Máy ảo Windows 10 với 4 lõi và bộ nhớ SSD Thử nghiệm cơ bản
4 x 8MB và sau đó 4 x 1,024 MB - Máy ảo Windows 10 với 8 lõi và bộ nhớ PCIe Thử nghiệm cơ bản
4 x 8MB, 4 x 1,024 MB, 8 x 1,024 MB - Máy ảo Windows 2012 R2 với 16 lõi và mảng RAID 10 kênh đôi gồm 8 ổ đĩa 10K SAS Thử nghiệm cơ bản
4 x 8MB, 4 x 1,024 MB, 8 x 1,024 MB và 16 x 1,024 MB
Các tệp đầu ra đã tạo ra một loạt các câu lệnh chèn mà tôi có thể dán vào đây:
CREATE TABLE #x ( [server] varchar(32), [test] varchar(32), [start] time(2), [end] time(2) ); -- inserts pasted here SELECT [server],[test],AVG(DATEDIFF(SECOND,[start],[end])*1.0) FROM #x GROUP BY [server],[test];
Dưới đây là thời gian của mười bài kiểm tra mỗi bài, được tính trung bình và làm tròn (bấm để phóng to):
Có thể dự đoán, IFI trở nên quan trọng với các tệp lớn hơn trên ổ đĩa chậm hơn
Quá trình thiết lập mất hơn một phút trên toàn bộ diện tích (thật tuyệt làm sao khi chạy thiết lập mà không có Công cụ quản lý). Sự sai lệch duy nhất, thực sự, là khi kích thước tệp bắt đầu lớn hơn trên các ổ đĩa cơ học và tính năng khởi tạo tệp tức thì bị tắt. Tôi không thể giả vờ bị sốc vì điều này.
Kết luận
Nếu bạn đang sử dụng SSD hoặc PCIe, việc khởi tạo tệp ngay lập tức không thể làm cho mọi thứ tồi tệ hơn, nhưng không có lợi ích rõ ràng trong quá trình thiết lập, miễn là các giới hạn về kích thước tệp cổ điển đối với tệp dữ liệu tempdb vẫn còn nguyên. Với các quy tắc hiện tại, dường như không thể kiểm tra tác động này vượt quá (1 GB x số lõi có sẵn). Tuy nhiên, nếu bạn đang sử dụng các ổ đĩa cơ học chậm, có một sự khác biệt đáng chú ý, ngay cả khi chỉ khởi tạo 8 GB hoặc 16 GB dữ liệu - việc xóa dữ liệu này khá tốn kém khi đầu đĩa phải di chuyển. Điều đó nói rằng, cho dù quá trình thiết lập mất 75 giây hay 2 phút là điều khá rắc rối trong một sơ đồ lớn của mọi thứ (trừ khi bạn đang cài đặt hàng trăm máy chủ, nhưng không tự động hóa điều đó vì lý do nào đó), vì vậy tôi nghĩ lợi ích lớn hơn ở đây là sự tiện lợi - không phải nhớ cấp cho tài khoản dịch vụ các quyền cần thiết một thời gian sau khi cài đặt thành công. Nếu bạn nghĩ về điều đó, tùy chọn cấu hình mới này thực sự có thể mang lại hiệu quả tốt hơn nhiều trong việc cài đặt tự động với số lượng lớn máy chủ, ngoài bất kỳ thời gian nào được lưu trong quá trình cài đặt thực tế.
- Tải xuống tệp cấu hình và tệp hàng loạt
(Thử nghiệm tiếp theo của tôi sẽ xem xét thời gian cần thiết để mở rộng tệp tempdb hiện có lên kích thước lớn hơn nhiều so với 1.024 MB sau khi cài đặt .)