Несколько лет спустя в настоящее время официально существует лучшее решение. DOM4 Mutation Observers заменяют устаревшие события мутации DOM3. Они , которые в настоящее время реализованы в современных браузерах как MutationObserver
(или как префикс поставщика WebKitMutationObserver
в старых версиях Chrome):
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var observer = new MutationObserver(function(mutations, observer) {
// fired when a mutation occurs
console.log(mutations, observer);
// ...
});
// define what element should be observed by the observer
// and what types of mutations trigger the callback
observer.observe(document, {
subtree: true,
attributes: true
//...
});
В этом примере прослушивается DOM изменения на document
и все его поддерево, и оно будет срабатывать при изменении атрибутов элемента, а также структурных изменений. Спецификация проекта имеет полный список действительных свойств для прослушивания мутаций :
childList
- Установите значение
true
, если мутации для целей дети должны быть обнаружены.attributes
- Установите на
true
, если необходимо соблюдать мутации для атрибутов цели.characterData
- Установите на
true
, если необходимо наблюдать мутации данных цели.поддерево
- Установите, чтобы
true
, если мутации не просто нацелены, но также должны наблюдаться потомки цели.attributeOldValue
- Установите значение
true
еслиattributes
установлено значение true и значение атрибута цели до того, как необходимо записать мутацию.characterDataOldValue
- Установите значение
true
, еслиcharacterData
установлено значение true и данные цели до того, как необходимо записать мутацию.attributeFilter
blockquote>
- Установить список локальных имен атрибутов (без пространства имен) если не все атрибутные мутации
(Этот список действует с апреля 2014 года; вы можете проверить спецификацию на любые изменения.)
Это даст Вам лучшие 50 операторов к среднему процессорному времени, проверить здесь на другие сценарии: http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true
SELECT TOP 50
qs.total_worker_time/qs.execution_count as [Avg CPU Time],
SUBSTRING(qt.text,qs.statement_start_offset/2,
(case when qs.statement_end_offset = -1
then len(convert(nvarchar(max), qt.text)) * 2
else qs.statement_end_offset end -qs.statement_start_offset)/2)
as query_text,
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
[Avg CPU Time] DESC
Как Yaakov говорит, выполненный профилировщик в течение нескольких минут при типичной загрузке, и сохраните результаты к таблице, которая позволит Вам выполнению запросов против результатов, делающих ее намного легче определить любой ресурс hogging запросы.
Мы используем продукт Центра внимания Quest. Очевидно, это - инвестиции вовремя и деньги, таким образом, это не могло бы выручить Вас в ближайшей перспективе, но если Вы, имеют большую среду SQL, это довольно полезно.
Я нашел Отчеты Панели инструментов Производительности быть очень полезным. Они - ряд пользовательских отчетов о RS, предоставленных Microsoft. Просто необходимо запустить установщик на клиенте ПК и затем выполнить setup.sql на экземпляре SQL Server.
После этого щелкните правой кнопкой по базе данных (не имеет значения который) в SSMS и Отчетах о goto-> Пользовательские отчеты. Перейдите к и выберите performance_dashboard_main.rdl, который расположен в в \Program папке Files\Microsoft SQL Server\90\Tools\PerformanceDashboard по умолчанию. Только необходимо сделать это однажды. После первого раза это обнаружится в списке отчетов.
Основное представление панели инструментов будет показывать загрузку ЦП со временем, среди прочего. Можно иногда обновлять его. Когда Вы видите скачок, просто нажимаете на панель в графике для получения подробных данных позади него.
Профилировщик может походить на подход "иголки в стоге сена", но он может поднять что-то полезное. Попытайтесь выполнить его в течение нескольких минут, в то время как базы данных являются объектом типичной загрузки и видят, выделяются ли какие-либо запросы как занимающий слишком много времени или hogging ресурсов в некотором роде. В то время как такая ситуация могла указать на некоторый общий вопрос, она могла также быть связана с некоторым конкретным вопросом с одним или двумя сайтами, которые смешивают вещи достаточно при определенных обстоятельствах для порождения очень низкой производительности через плату.
Выполненный Профилировщик и фильтр для запросов, которые берут больше, чем определенное число чтений. Для приложения я продолжил работать, любой запрос несоздания отчетов, который взял больше чем 5 000 чтений, заслужил второго взгляда. Ваше приложение может иметь другой порог, но идея является тем же.
Эта утилита Erland Sommarskog удивительно полезна.
Это - хранимая процедура, которую Вы добавляете к своей базе данных. Выполните его каждый раз, когда Вы хотите видеть, какие запросы активны и получают хорошее изображение блокировок, блоков, и т.д. Я использую его регулярно, когда вещи кажутся засоренными.