Вы хотите, чтобы ваши x
применялись случайным образом или были детерминированными?
Случайный вариант:
Если вы хотите, чтобы x
также был случайным, вы можете просто сгенерируйте случайное значение:
int percent = ThreadLocalRandom.current().nextInt(1, 100);
if (percent < x) {
// ...get the actual random value.
}
percent
должно быть между 1 и 100, поэтому у вас есть ровно 100 возможных значений. Если вы включите 0
, у вас есть 101. Затем вы делаете свою проверку процента. Если процент находится снаружи (больше чем) x
, x
был слишком мал. Следовательно, вы получаете false
, в противном случае - true
. Оттуда вы можете работать с if
-условием.
Детерминированный вариант:
Если детерминирован, это зависит от вашего предпочтительного поведения. Например, вы можете использовать счетчик, и каждый раз, когда вы превышаете 100, вы «ломаетесь» и возвращаете истину:
// object attribute.
private Integer accumulator = 0;
// in method (should be synchronized, at least on accumulator, if you use multithreading):
accumulator += x;
boolean overflow = false;
if (accumulator >= 100) {
overflow = true;
accumulator %= 100; // this applies modulo 100 to accumulator.
}
if (overflow) {
// ...get the actual random value.
}
При этом вы получите ровно x
процентов от true
с, чем больше вы называете свой метод. В начале у вас ничего не будет, если не считать 100%, но со временем точность возрастает.
В SQL 2005 вы можете использовать представления управления для поиска медленно выполняющихся запросов. Хороший сценарий, который я недавно обнаружил для производительности SQL-сервера поможет вам начать работу, в нем будут перечислены данные с самыми низкими показателями.
SELECT creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
Прежде чем использовать профилировщик, я проверяю встроенные отчеты об использовании. Щелкните правой кнопкой мыши базу данных, Отчеты, Стандартные отчеты, затем Статистика выполнения объектов.
В нем перечислены текущие кэшированные планы выполнения, а также количество ресурсов и количество выполненных ими операций. Как правило, это дает очень хорошее представление о том, чем занят сервер.
Столбец длительности делает это для меня, но иногда я смотрю и на столбцы для чтения и записи.
Я использую фильтр TSQL: StmtCompleted для получения необработанных запросов. Возможно, вы захотите добавить к этому другие хранимые процедуры, но tsql - это «база», которую вам нужно просмотреть. Как говорится в статье MSDN
: «Выполнение хранимой процедуры может контролироваться SP: начиная, SP: StmtStarting, SP: StmtCompleted и SP: Завершенные классы событий и все Классы событий TSQL. "