|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
Всем привет, ребята! Подскажите, пожалуйста, почему именно так реализовано. Использую для обслуживания баз скрипты от MS tigertoolbox (https://github.com/microsoft/tigertoolbox) На моем sql сервере @@DATEFIRST = 1 (SQL 2008 R2 Rus - 10.50.6560.0 (X64) (Build 7601: Service Pack 1)). Для запуска обслуживания в выходные в скрипте для определения Воскресенья используется код: -- Is it Sunday yet? IF (SELECT 1 & POWER(2, DATEPART(weekday, GETDATE())-1)) > 0 BEGIN PRINT '** Start: ' + CONVERT(VARCHAR, GETDATE()) <..............> END ELSE BEGIN PRINT '** Skipping: Today is not Sunday - ' + CONVERT(VARCHAR, GETDATE()) END; Да у меня задание на самом деле стартует в понедельник, не в этом суть, но почему именно так определяется день недели? (SELECT 1 & POWER(2, DATEPART(weekday, GETDATE())-1)) > 0, чем плох DATEPART(weekday, GETDATE())? Также в скрипте находил код: -- What day is today? 1=Sunday, 2=Monday, 4=Tuesday, 8=Wednesday, 16=Thursday, 32=Friday, 64=Saturday SELECT @TodayBucket = CASE WHEN 1 & POWER(2, DATEPART(weekday, GETDATE())-1) = 1 THEN 1 WHEN 2 & POWER(2, DATEPART(weekday, GETDATE())-1) = 2 THEN 2 WHEN 4 & POWER(2, DATEPART(weekday, GETDATE())-1) = 4 THEN 3 WHEN 8 & POWER(2, DATEPART(weekday, GETDATE())-1) = 8 THEN 4 WHEN 16 & POWER(2, DATEPART(weekday, GETDATE())-1) = 16 THEN 5 WHEN 32 & POWER(2, DATEPART(weekday, GETDATE())-1) = 32 THEN 6 WHEN 64 & POWER(2, DATEPART(weekday, GETDATE())-1) = 64 THEN 7 END; Почему так??? PS Если по данному скрипту/обслуживанию еще можете подсказать, возможно это best practices, но я не нашел - при обслуживании для определения списка баз исключаются базы более 4 Гб, ниже код, почему так? Хотя я еще почитаю про эти скрипты. /* DBCC UPDATEUSAGE corrects the rows, used pages, reserved pages, leaf pages and data page counts for each partition in a table or index. IMPORTANT: Consider running DBCC UPDATEUSAGE routinely (for example, weekly) only if the database undergoes frequent Data Definition Language (DDL) modifications, such as CREATE, ALTER, or DROP statements. http://msdn.microsoft.com/en-us/library/ms188414.aspx Exludes all Offline or Read-Only DBs. Also excludes all databases over 4GB in size. */ ...... SELECT DISTINCT QUOTENAME(d.name), 0 FROM sys.databases d INNER JOIN sys.master_files smf ON d.database_id = smf.database_id WHERE d.is_read_only = 0 AND d.state = 0 AND d.database_id <> 2 AND smf.type = 0 AND (smf.size * 8)/1024 < 4096 ...... Всем спасибо заранее! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 22:30 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
dpotap Также в скрипте находил код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Почему так??? прогреть сервер )) пс крОсивый "индусский код" ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2021, 23:13 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
dpotap -- What day is today? 1=Sunday, 2=Monday, 4=Tuesday, 8=Wednesday, 16=Thursday, 32=Friday, 64=Saturday SELECT @TodayBucket = CASE WHEN 1 & POWER(2, DATEPART(weekday, GETDATE())-1) = 1 THEN 1 WHEN 2 & POWER(2, DATEPART(weekday, GETDATE())-1) = 2 THEN 2 WHEN 4 & POWER(2, DATEPART(weekday, GETDATE())-1) = 4 THEN 3 WHEN 8 & POWER(2, DATEPART(weekday, GETDATE())-1) = 8 THEN 4 WHEN 16 & POWER(2, DATEPART(weekday, GETDATE())-1) = 16 THEN 5 WHEN 32 & POWER(2, DATEPART(weekday, GETDATE())-1) = 32 THEN 6 WHEN 64 & POWER(2, DATEPART(weekday, GETDATE())-1) = 64 THEN 7 END; Почему так??? https://docs.microsoft.com/ru-ru/sql/relational-databases/system-tables/dbo-sysschedules-transact-sql?view=sql-server-ver15 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 08:14 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
dpotap, Решение для обслуживания баз: https://ola.hallengren.com авторпочему именно так определяется день недели? Спросите индусов, который это писали... У них SET DATEFIRST 7, у нас 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 11:51 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
Как вариант ставлю свои пять копеек - https://github.com/sergiisyrovatchenko/SQLIndexManager ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 11:56 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
Sergey Syrovatchenko Как вариант ставлю свои пять копеек - https://github.com/sergiisyrovatchenko/SQLIndexManager пока вынимай свои 5 копеек, ТС пока заблудший овц "почему именно так определяется день недели" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 13:37 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
ТС спросил: " почему именно так определяется день недели? (SELECT 1 & POWER(2, DATEPART(weekday, GETDATE())-1)) > 0, чем плох DATEPART(weekday, GETDATE()) "? invm ответил: " Это соответствует кодировке дней недели в msdb.dbo.sysschedules ". И все же, почему используется такая кодировка 1=Sunday, 2=Monday, 4=Tuesday, 8=Wednesday, 16=Thursday, 32=Friday, 64=Saturday? Потому что при такой кодировке дней недели они могут быть представлены множеством , т.е. несколько дней недели можно представить одним числом, например: 1 --> {Sunday}, событие должно произойти в воскресенье. 2 --> {Monday}, событие должно произойти в понедельник. 3 = 1 + 2 --> {Sunday} U {Monday} = {Sunday, Monday}, событие должно произойти и в воскресенье, и в понедельник. При DATEPART одно число представляет один день. 3 --> Tuesday, событие должно произойти во вторник. Следовательно, это два разных способа представления дней недели, каждый из которых имеет свою область применения. В той же таблице msdb.dbo.sysschedules при значении аргумента freq_type равным 8 в аргументе freq_interval используется один способ представления дней недели, а при значении 32 - другой способ. Что касается кода для преобразования одного представления дней недели в другое, то выражение 1 & 2 weekday вполне нормальное, в котором ключевой операцией является битовая операция & (bitwise AND). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2021, 20:41 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
Wlr-l ТС спросил: " почему именно так определяется день недели? (SELECT 1 & POWER(2, DATEPART(weekday, GETDATE())-1)) > 0, чем плох DATEPART(weekday, GETDATE()) "? invm ответил: " Это соответствует кодировке дней недели в msdb.dbo.sysschedules ". И все же, почему используется такая кодировка 1=Sunday, 2=Monday, 4=Tuesday, 8=Wednesday, 16=Thursday, 32=Friday, 64=Saturday? Потому что при такой кодировке дней недели они могут быть представлены множеством , т.е. несколько дней недели можно представить одним числом, например: 1 --> {Sunday}, событие должно произойти в воскресенье. 2 --> {Monday}, событие должно произойти в понедельник. 3 = 1 + 2 --> {Sunday} U {Monday} = {Sunday, Monday}, событие должно произойти и в воскресенье, и в понедельник. При DATEPART одно число представляет один день. 3 --> Tuesday, событие должно произойти во вторник. Следовательно, это два разных способа представления дней недели, каждый из которых имеет свою область применения. В той же таблице msdb.dbo.sysschedules при значении аргумента freq_type равным 8 в аргументе freq_interval используется один способ представления дней недели, а при значении 32 - другой способ. Что касается кода для преобразования одного представления дней недели в другое, то выражение 1 & 2 weekday вполне нормальное, в котором ключевой операцией является битовая операция & (bitwise AND). "Потому что" у них там первый день недели суньдей, а здесь - понедельнег ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 11:46 |
|
Неважный вопрос, но не дает покоя. Объясните, пожалуйста.
|
|||
---|---|---|---|
#18+
TC спросил: " Также в скрипте находил код: -- What day is today? 1=Sunday, 2=Monday, 4=Tuesday, 8=Wednesday, 16=Thursday, 32=Friday, 64=Saturday ... Почему так??? "? Потому что, как заметил Ролг Хупин, у них там первый день недели суньдей, а должен быть выньдень. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2021, 22:51 |
|
|
start [/forum/topic.php?fid=46&msg=40105778&tid=1684175]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
137ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 235ms |
0 / 0 |