Distributed Replay: همگامسازی Target و ساخت Trace
یادداشت حقوقی: کاربر حق ترجمه و بازنشر این اثر را برای پروژه تأیید کرده است.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-778Indexهای پیشنهادی روی 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-779Extended 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-798Listing 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-807Workload تولیدشده شامل 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