Distributed Replay: همگام‌سازی Target و ساخت Trace | Pro SQL Server 2019 Administration

Distributed Replay: همگام‌سازی Target و ساخت Trace

توسط admin | گروه SQL Server | 1405/05/20

نظرات 0

Distributed Replay: همگام‌سازی Target و ساخت Trace

Chapter 21 — Synchronizing the Target and Creating a Trace

نویسنده: Peter A. Carter

زبان منبع: انگلیسی

محدوده: صفحات PDF 777 تا 807

تاریخ ترجمه: 2026-08-11

اعتبار ترجمه: ترجمه با کمک هوش مصنوعی

PAGE-777

همگام‌سازی Target و آماده‌سازی Trace

چون Workload شامل DML است، Target باید بلافاصله پیش از Capture/Replay با Database منبع همگام شود تا Keyها و State داده یکسان باشند. کتاب با Backup گرفتن از Chapter21 روی Controller و Restore روی Target این همگامی را انجام می‌دهد.

Listing 21-6 — Backup/Restore Synchronization

Synchronizing the Target
Because we replay a trace that includes DML statements, we need to synchronize our
target database immediately before we start capturing the trace to ensure that the IDs
align. We perform this task by backing up the Chapter21 database on the controller and
restoring it on the target. We can achieve this by using the script in Listing 21-6.
Tip  Remember to change the file locations to match your own configuration
before running the script.
Listing 21-6.  Synchronizing the Chapter21 Database
--Part 1 - To be run on the controller
BACKUP DATABASE Chapter21
TO  DISK = N'F:\MSSQL\Backup\Chapter21.bak'
WITH NOFORMAT, NOINIT,  NAME = N'Chapter21-Full Database Backup',
SKIP,  STATS = 10
GO
--Part 2 - To be run on the client, after moving the backup file across
RESTORE DATABASE Chapter21
FROM  DISK = N'F:\MSSQL\Backup\Chapter21.bak'
WITH  FILE = 1, STATS = 5
GO
Ideally, the database should have the same DatabaseID on each server, but if this is
not feasible, then ensure that the Database_name action is captured in the event session
for mapping purposes. You should also ensure that any logins contained within the
trace are created on the Target server, with the same permissions and the same default
database. If you fail to do this, you get replay errors.
PAGE-778

Indexهای پیشنهادی روی Target

در سناریوی Performance Test، پس از Restore می‌توان Indexهای پیشنهادی را روی نسخه Target ساخت تا اثر Optimization اندازه‌گیری شود. نکته کلیدی این است که Data State ثابت بماند و فقط متغیر مورد آزمون، مانند Index Design، تغییر کند.

Listing 21-7 — Index Suggestions

Since our demonstration is for testing performance enhancements, you may wish
to take this opportunity to create appropriate indexes on the Customers and Addresses
tables in the synchronized database. You can find a script including index suggestions
that are appropriate for our trace workload in Listing 21-7.
Listing 21-7.  Index Suggestions
USE Chapter21
GO
CREATE INDEX IDX_Customers_LastName ON dbo.Customers(LastName)
INCLUDE(FirstName) ;
GO
CREATE INDEX IDX_Customers_AddressID ON dbo.Customers(DeliveryAddressID) ;
GO
CREATE INDEX IDX_Addresses_AddressID ON dbo.Addresses(AddressID) ;
GO
CREATE INDEX IDX_Customers_LastName_CustomerID ON dbo.Customers(LastName,
CustomerID) ;
GO
Creating a Trace
Let’s now create our Extended Event session and start the trace. You should
configure the Event session to capture the events, event fields, and actions detailed
in Table 21-4.
PAGE-779

Extended Events موردنیاز برای Distributed Replay

PAGE-780

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
begin_tran_completed
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
begin_tran_starting
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-781

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
commit_tran_completed
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
commit_tran_starting
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-782

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
cursor_close
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
cursor_execute
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
(continued)
PAGE-783

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
cursor_implicit_conversion –
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
cursor_open
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
(continued)
PAGE-784

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
cursor_prepare
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
cursor_recompile
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
(continued)
PAGE-785

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
cursor_unprepare
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
sql_text
transaction_id
database_file_size_change
database_name
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-786

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
dtc_transaction
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
exec_prepared_sql
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-787

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
existing_connection
database_name
option_text
event_sequence
client_app_name
client_hostname
client_pid
database_id
database_name
is_system
nt_username
request_id
server_instance_name
server_principal_name
session_id
session_nt_username
session_resource_group_id
session_resource_pool_id
session_server_principal_name
username
(continued)
PAGE-788

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
login
database_name
option_text
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
client_app_name
client_hostname
client_pid
database_id
database_name
is_system
nt_username
plan_handle
request_id
server_instance_name
server_principal_name
session_id
session_nt_username
session_resource_group_id
session_resource_pool_id
session_server_principal_name
transaction_id
username
(continued)
PAGE-789

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
logout
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
client_app_name
client_hostname
client_pid
database_id
database_name
is_system
nt_username
plan_handle
request_id
server_instance_name
server_principal_name
session_id
session_nt_username
session_resource_group_id
session_resource_pool_id
session_server_principal_name
transaction_id
username
(continued)
PAGE-790

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
prepare_sql
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
promote_tran_completed
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-791

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
promote_tran_started
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
rollback_tran_completed
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-792

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
rollback_tran_started
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
rpc_completed
data_stream
output_
parameters
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-793

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
rpc_starting
data_stream
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
save_tran_completed
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-794

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
save_tran_started
statement
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
server_memory_change
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-795

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
sql_batch_completed
batch_text
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
sql_batch_starting
batch_text
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-796

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

Table 21-4.  (continued)
Event
Event Fields
Actions
sql_transaction
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
trace_flag_changed
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
(continued)
PAGE-797

جدول 21-4 Eventها، Event Fieldها و Actionهایی را مشخص می‌کند که برای Capture سازگار با Distributed Replay باید در Event Session قرار گیرند. نام‌های فنی Event/Action بدون ترجمه حفظ می‌شوند تا بتوان آن‌ها را مستقیماً با SQL Server تطبیق داد.

Table 21-4 — جزئیات فنی کامل این صفحه

So these are the events, event fields, and actions that we include in our session
definition (see Listing 21-8).
Tip  If you do not include all recommended events, event fields, and actions,
then errors may be thrown when you convert the .xel file to a .trc file.
A workaround here is to use trace flag -T28 when running ReadTrace in order
to ignore the RML requirements. This can lead to unpredictable results, however,
and is not advised.
Table 21-4.  (continued)
Event
Event Fields
Actions
unprepare_sql
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
PAGE-797

ساخت Event Session

پس از تعیین فهرست Eventها، Session باید همه Event Fieldها و Actionهای توصیه‌شده را داشته باشد. حذف بعضی از آن‌ها می‌تواند هنگام تبدیل فایل .xel به .trc خطا ایجاد کند. کتاب به Trace Flag مربوط به ReadTrace به‌عنوان Workaround اشاره می‌کند.

راهنمای منبع برای Capture

So these are the events, event fields, and actions that we include in our session
definition (see Listing 21-8).
Tip  If you do not include all recommended events, event fields, and actions,
then errors may be thrown when you convert the .xel file to a .trc file.
A workaround here is to use trace flag -T28 when running ReadTrace in order
to ignore the RML requirements. This can lead to unpredictable results, however,
and is not advised.
Table 21-4.  (continued)
Event
Event Fields
Actions
unprepare_sql
–
collect_current_thread_id
event_sequence
cpu_id
scheduler_id
system_thread_id
task_address
worker_address
database_id
database_name
is_system
plan_handle
request_id
session_id
transaction_id
PAGE-798

Listing 21-8 — تعریف DReplay Event Session

PAGE-799

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD EVENT sqlserver.commit_tran_starting(SET collect_statement=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.cursor_close(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.cursor_execute(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.cursor_implicit_conversion(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.cursor_open(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
PAGE-800

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD EVENT sqlserver.cursor_prepare(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.cursor_recompile(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.cursor_unprepare(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.sql_text,sqlserver.
transaction_id)),
ADD EVENT sqlserver.database_file_size_change(SET collect_database_name=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.dtc_transaction(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
PAGE-801

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD EVENT sqlserver.exec_prepared_sql(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.existing_connection(SET collect_database_
name=(1),collect_options_text=(1)
    ACTION(package0.event_sequence,sqlserver.client_app_name,sqlserver.
client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.
request_id,sqlserver.server_instance_name,sqlserver.server_principal_
name,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.
session_resource_group_id,sqlserver.session_resource_pool_id,sqlserver.
session_server_principal_name,sqlserver.username)),
ADD EVENT sqlserver.login(SET collect_database_name=(1),collect_options_
text=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.client_app_name,sqlserver.
client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_
handle,sqlserver.request_id,sqlserver.server_instance_name,sqlserver.
server_principal_name,sqlserver.session_id,sqlserver.session_nt_
username,sqlserver.session_resource_group_id,sqlserver.session_
resource_pool_id,sqlserver.session_server_principal_name,sqlserver.
transaction_id,sqlserver.username)),
ADD EVENT sqlserver.logout(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.client_app_name,sqlserver.
client_hostname,sqlserver.client_pid,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.nt_username,sqlserver.plan_
handle,sqlserver.request_id,sqlserver.server_instance_name,sqlserver.
PAGE-802

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

server_principal_name,sqlserver.session_id,sqlserver.session_nt_
username,sqlserver.session_resource_group_id,sqlserver.session_
resource_pool_id,sqlserver.session_server_principal_name,sqlserver.
transaction_id,sqlserver.username)),
ADD EVENT sqlserver.prepare_sql(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.promote_tran_completed(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.promote_tran_starting(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.rollback_tran_completed(SET collect_statement=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.rollback_tran_starting(SET collect_statement=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
PAGE-803

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD EVENT sqlserver.rpc_completed(SET collect_data_stream=(1),collect_
output_parameters=(1),collect_statement=(0)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.rpc_starting(SET collect_data_stream=(1),collect_
statement=(0)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.save_tran_completed(SET collect_statement=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.save_tran_starting(SET collect_statement=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.server_memory_change(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
PAGE-804

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.sql_batch_starting(SET collect_batch_text=(1)
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.sql_transaction(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.trace_flag_changed(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id)),
ADD EVENT sqlserver.unprepare_sql(
    ACTION(package0.collect_current_thread_id,package0.event_
sequence,sqlos.cpu_id,sqlos.scheduler_id,sqlos.system_thread_id,sqlos.
task_address,sqlos.worker_address,sqlserver.database_id,sqlserver.
database_name,sqlserver.is_system,sqlserver.plan_handle,sqlserver.
request_id,sqlserver.session_id,sqlserver.transaction_id))
PAGE-805

در این بخش تعریف کامل Extended Event Session ادامه دارد. Actionهایی مانند session_id، database_id، plan_handle، username، transaction_id و Contextهای OS/SQL جمع‌آوری می‌شوند و Target از نوع event_file است. کد دقیق به‌صورت LTR حفظ شده است.

کد کامل Event Session در صفحه منبع

ADD TARGET package0.event_file(SET filename=N'C:\MSSQL\DReplay.xel')
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_
DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_
MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=ON) ;
GO
ALTER EVENT SESSION DReplay
ON SERVER
STATE = start;
GO
To generate activity to be traced, depending on your scenario, you may wish to
capture real user activity; to do so, you need to use a tool, such as SQLStress, or script
activity. In our case, we script activity to be traced (see Listing 21-9).
Listing 21-9.  Generating Activity
USE Chapter21
GO
DECLARE @Numbers TABLE
(
        Number        INT
)
;WITH CTE(Number)
AS
(
        SELECT 1 Number
        UNION ALL
        SELECT Number + 1
        FROM CTE
        WHERE Number < 100
)
INSERT INTO @Numbers
SELECT Number FROM CTE;
PAGE-806

ایجاد Workload برای Capture

پس از Start کردن Event Session، Script آزمایشی داده و Transactionهایی تولید می‌کند تا Trace دارای ترکیبی از عملیات واقعی باشد. این Workload باید روی Database منبع اجرا شود و سپس Event Session متوقف شود.

Workload Script — بخش اول

DECLARE @Names TABLE
(
        FirstName        VARCHAR(30),
        LastName        VARCHAR(30)
);
INSERT INTO @Names
VALUES('Peter', 'Carter'),
                 ('Michael', 'Smith'),
                 ('Danielle', 'Mead'),
                 ('Reuben', 'Roberts'),
                 ('Iris', 'Jones'),
                 ('Sylvia', 'Davies'),
                 ('Finola', 'Wright'),
                 ('Edward', 'James'),
                 ('Marie', 'Andrews'),
                 ('Jennifer', 'Abraham');
SELECT * INTO #Customers
FROM
         (SELECT
                 (SELECT TOP 1 FirstName FROM @Names ORDER BY NEWID())
FirstName,
                 (SELECT TOP 1 LastName FROM @Names ORDER BY NEWID())
LastName,
                 (SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID())
BillingAddressID,
                 (SELECT TOP 1 Number FROM @Numbers ORDER BY NEWID())
DeliveryAddressID,
                 (SELECT TOP 1 CAST(RAND() * Number AS INT) * 10000
                  FROM @Numbers
                  ORDER BY NEWID()) CreditLimit,
                 (SELECT TOP 1 CAST(RAND() * Number AS INT) * 9000
                  FROM @Numbers
                  ORDER BY NEWID()) Balance
        FROM @Numbers a
) a;
PAGE-807

Workload تولیدشده شامل Insert/Select و تکرار اجرای Batch است تا Trace برای Replay حجم قابل‌توجهی داشته باشد. پس از Capture، فایل XEL ورودی مرحله تبدیل و Preprocess خواهد شد.

Workload Script — ادامه

INSERT INTO dbo.Customers
SELECT * FROM #Customers ;
DROP TABLE #Customers
GO 10
SELECT FirstName, LastName
FROM dbo.Customers
WHERE LastName = 'Carter'
GO 100
SELECT COUNT(*)
FROM dbo.Customers c
INNER JOIN dbo.Addresses a
ON c.DeliveryAddressID = a.AddressID
GO 100
SELECT *
FROM dbo.Addresses
GO 100
DELETE FROM dbo.Customers
WHERE LastName = 'Mead'
        OR CustomerID > 1000000
GO 50
SELECT TOP 10 PERCENT *
FROM dbo.Customers
GO 100
We can now stop our trace by using the command in Listing 21-10.
Listing 21-10.  Stopping the Trace
ALTER EVENT SESSION DReplay
ON SERVER
STATE = stop;
GO

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500