Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 18   вперед  Ctrl
 Антипаттерны на работе.  [new]
mnbvcx
Member

Откуда:
Сообщений: 170
Думаю увольняться с текущего места работы, вот то, что мне не нравится (MS SQL Server 2008/12) - не в порядке приоритетов, вспомнилось на раз(часть1):
- в конструкции Insert .. Select в селекте есть ордер бай
- в Where нету SARG по дате - там какой-нибудь Cast или Convert
- в таблице столбцы называются column1, column2 .. column25
- в таблице столбцы column1 .. column25 типа varchar(500) - а туда и числа инсертятся
- есть 2 (может больше) представления с разными названиями, но с одинаковыми определениями
- в коде обфускация, типа case when condition then 1 else 1 end
- внешние джойны висят в пустоте
- в джобе сидит перестройка индексов, а БД на ССД
11 янв 19, 22:48    [21783353]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
кит северных морей
Member

Откуда: Красноярск
Сообщений: 692
mnbvcx,

я не знаю, как хранятся и читаются данные в mssql, но, например, в Oracle order by в insert-select имеет вполне конкретный смысл.
11 янв 19, 23:00    [21783358]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7088
mnbvcx,

Перестройка индексов уменьшает их физический размер. Так, что идея с увольнением - верная.
11 янв 19, 23:04    [21783360]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
mnbvcx
Member

Откуда:
Сообщений: 170
кит северных морей
mnbvcx,

я не знаю, как хранятся и читаются данные в mssql, но, например, в Oracle order by в insert-select имеет вполне конкретный смысл.

Да ладно???
Напиши на профильном форуме.
Как-то неправославненько это - тупо ресурсы тратишь ни на что.
Это как писать select distinct a from (select distinct q a from x)
11 янв 19, 23:20    [21783365]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
кит северных морей
Member

Откуда: Красноярск
Сообщений: 692
mnbvcx,

ресурсы тратятся на то, чтобы близкие по смыслу данные лежали рядом, и читать их было проще. о православности подхода ничего сказать не могу - не силен.
11 янв 19, 23:34    [21783369]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59402
Блог
mnbvcx
Как-то неправославненько это - тупо ресурсы тратишь ни на что.

Обычно чем меньше знаешь - тем больше видишь в коде разных "тупых" и "бессмысленных" конструкций. Ну зачем, например, люди в своё время писали a.id = b.id + 0, ведь ежу понятно, что это эквивалентно a.id = b.id? Что касается MSSQL - вопрос к тем, кто с ним работает, но в первую очередь я бы отметил, что при его блокировочной природе этот вот order by способен кардинально ускорить выполнение insert/select-а.

mnbvcx
Это как писать select distinct a from (select distinct q a from x)

А расскажешь, какие именно ресурсы при этом тупо тратятся? Чувствую, нас ждёт интересная история
12 янв 19, 00:45    [21783399]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5042
Relic Hunter
mnbvcx,

Перестройка индексов уменьшает их физический размер. Так, что идея с увольнением - верная.

+1

разреженный индекс требует больше IO и места в buffer pool
12 янв 19, 00:45    [21783400]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
mefman
Member

Откуда:
Сообщений: 2681
про ребилд индексов хорошо в свое время высказался святой фома
12 янв 19, 00:48    [21783401]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59402
Блог
mefman
про ребилд индексов хорошо в свое время высказался святой фома

Он сказал абсолютно правильно - надо брать измеримые характеристики и проверять, нужно ли их улучшать и улучшит ли их перестройка индексов.

Ну просто для примера, был у меня в практике случай: в табличке, в которой обычно бывало в пределах 10'000 записей, на некоторое время оказалось 10'000'000. Потом количество вернулось в норму, и мне пришлось полчаса уламывать DBA перестроить индекс - после чего, к его удивлению, запросы к табличке таки действительно заработали гораздо шустрее.
12 янв 19, 00:54    [21783407]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
mefman
Member

Откуда:
Сообщений: 2681
softwarer
mefman
про ребилд индексов хорошо в свое время высказался святой фома

Он сказал абсолютно правильно - надо брать измеримые характеристики и проверять, нужно ли их улучшать и улучшит ли их перестройка индексов.

Ну просто для примера, был у меня в практике случай: в табличке, в которой обычно бывало в пределах 10'000 записей, на некоторое время оказалось 10'000'000. Потом количество вернулось в норму, и мне пришлось полчаса уламывать DBA перестроить индекс - после чего, к его удивлению, запросы к табличке таки действительно заработали гораздо шустрее.

а пересбор статистики не помог?
12 янв 19, 00:56    [21783409]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
mefman
Member

Откуда:
Сообщений: 2681
mefman
softwarer
пропущено...

Он сказал абсолютно правильно - надо брать измеримые характеристики и проверять, нужно ли их улучшать и улучшит ли их перестройка индексов.

Ну просто для примера, был у меня в практике случай: в табличке, в которой обычно бывало в пределах 10'000 записей, на некоторое время оказалось 10'000'000. Потом количество вернулось в норму, и мне пришлось полчаса уламывать DBA перестроить индекс - после чего, к его удивлению, запросы к табличке таки действительно заработали гораздо шустрее.

а пересбор статистики не помог?

но в целом речь не от том, когда это может быть необходимо, а о шедулях с перестройкой ради перестройки.
это вот точно идиотизм.
12 янв 19, 00:58    [21783411]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
NePZ
Member

Откуда:
Сообщений: 719
mnbvcx
Думаю увольняться с текущего места работы, вот то, что мне не нравится (MS SQL Server 2008/12) - не в порядке приоритетов, вспомнилось на раз(часть1):
- в конструкции Insert .. Select в селекте есть ордер бай
- в Where нету SARG по дате - там какой-нибудь Cast или Convert
- в таблице столбцы называются column1, column2 .. column25
- в таблице столбцы column1 .. column25 типа varchar(500) - а туда и числа инсертятся
- есть 2 (может больше) представления с разными названиями, но с одинаковыми определениями
- в коде обфускация, типа case when condition then 1 else 1 end
- внешние джойны висят в пустоте
- в джобе сидит перестройка индексов, а БД на ССД


Реальные антипаттерны, это когда
1. в БД слоя абстракции нет от слова совсем и несколько приложений к ней напрямую обращается, причем в паре тысяч мест
2. "модель данных" перекочевала из Excel через Access в MSSQL без изменений. Или когда на паре сотен веб-форм в общей сложности под несколько тысяч полей, и под каждое поле в БД отдельная сущность. Нормальные формы? Не, не слышали
3. ключ определяется через комбинацию 7 текстовых полей километровой длины. И по этим полям джойны в каждом первом запросе
4. в нагруженной OLTP базе (учетной системы, например) пилят OLAP кубы/сотни отчетов и гоняют ad hoc аналитику
5. некоторые запросы в Mission critical системе содержат декартово произведение, а проблема производительности решается закупкой hi-end железа за миллионы долларов

итд
12 янв 19, 01:06    [21783415]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
softwarer
Обычно чем меньше знаешь - тем больше видишь в коде разных "тупых" и "бессмысленных" конструкций. Ну зачем, например, люди в своё время писали a.id = b.id + 0, ведь ежу понятно, что это эквивалентно a.id = b.id


Вот недавеча в коде написанном под на 2000 —2005 sql сервер такого добра в одной вьюхе видел в 4х местах. Там еще было a.id = b.id + c.id * 0
Подумалось, что так было модно сервер в нужную позу нагибать, дабы он не мог с правой стороны поиск по индексу использовать и не вздумал конкретно в этом месте таблицы местами поменять... а на самом деле зачем?
12 янв 19, 01:10    [21783417]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7088
mefman
mefman
пропущено...

а пересбор статистики не помог?

но в целом речь не от том, когда это может быть необходимо, а о шедулях с перестройкой ради перестройки.
это вот точно идиотизм.


Ну да, тогда и масло в машине нужно здавать на анализы перед его заменой. И фильтр тоже... Есть просто здравый смысл и есть практицизм. И есть ли смысл тратить время на это.
12 янв 19, 01:11    [21783418]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Что касается MSSQL - вопрос к тем, кто с ним работает, но в первую очередь я бы отметил, что при его блокировочной природе этот вот order by способен кардинально ускорить выполнение insert/select-а.

Да может там тупо identity на кластерном ключе? И авторы желают положить записи именно в таком порядке?
12 янв 19, 01:16    [21783419]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7088
Да и шедулер можно запускать с различной частотой. Вот на это время потратить можно, на как часто, но один раз.
12 янв 19, 01:17    [21783420]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59402
Блог
mefman
а пересбор статистики не помог?

Видимо, не помог. Я не готов в деталях вспомнить то, что было пятнадцать лет назад... а если попытаться реконструировать сейчас - я бы в первую очередь сказал, что это была постоянно используемая таблица, запросы к которой месяцами не вытеснялись из shared pool-а. Это был восьмой Оракл, пересбор статистики никак не влиял на давным-давно построенные планы. Ну а flush shared pool админы делать очень не любили - после этого довольно долго и заметно тормозил весь сервер, пока кэш заново не прогревался.
12 янв 19, 01:22    [21783422]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 59402
Блог
Mike_za
Подумалось, что так было модно сервер в нужную позу нагибать

Именно так
12 янв 19, 01:29    [21783430]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
softwarer, а самое смешное, что когда с коллегой начали переьерать доступные ныне хинты из документации то и заменить такое нечем
12 янв 19, 01:31    [21783431]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
кит северных морей
Member

Откуда: Красноярск
Сообщений: 692
softwarer
Обычно чем меньше знаешь - тем больше видишь в коде разных "тупых" и "бессмысленных" конструкций.

очень часто это так. это правда. id + 0 - хороший пример.

но увы, гораздо чаще говнокод - это просто говнокод :)
12 янв 19, 01:51    [21783444]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36501
mnbvcx
Думаю увольняться с текущего места работы, вот то, что мне не нравится (MS SQL Server 2008/12)
Увольняйтесь. Когда в стране дефицит дворников, а вы освоить MSSQL не в состоянии оказались, то выбор должен быть очевидным.

mnbvcx
часть1
С удовольствием почитаю часть2.
12 янв 19, 04:13    [21783455]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
fsfffw8fd7
Member

Откуда:
Сообщений: 109
mnbvcx
Думаю увольняться с текущего места работы

А куда пойти работать? Подскажи, я очередь в отдел кадров займу.

У нас на работе, на любую ерунду, когда нужно получить какие-то данные из других баз, пишут скалярную функцию, куда передают ключи и в ответе получают поле с нужными данными, и все это чудо работает на миллионных таблицах. Реализуется через вьюху без всяких проблем. Чтобы обновить часть данных в табличке, вместо простого merge пишут delete, а потом insert, причем без транзакции. В каждом селекте к каждой табличке пишут nolock, вообще не пытаясь разобраться. Темповые таблички практически в каждой процедуре, не говоря про то, что в каждой процедуре черт ногу сломит.

И эти люди мнят себя гениями разработки, учат меня писать код в их стиле и унижают за то, что я забыл название чего-то и завис, пытаясь вспомнить, посмотрел бы я, как у них память будет работать в полтинник. Любая попытка сказать хоть как-то писать грамотнее, сразу доходит до разборок с начальством в стиле "ты хочешь у нас работать или нет" с распальцовкой.

Достало все это дерьмо, каждая новая работа только хуже прежней, где очередь занимать?
12 янв 19, 10:40    [21783500]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Алекссс
Member

Откуда:
Сообщений: 1985
кит северных морей
mnbvcx,

я не знаю, как хранятся и читаются данные в mssql, но, например, в Oracle order by в insert-select имеет вполне конкретный смысл.

какой?
12 янв 19, 12:00    [21783528]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
Алекссс
Member

Откуда:
Сообщений: 1985
NePZ
1. в БД слоя абстракции нет от слова совсем и несколько приложений к ней напрямую обращается

о каких конкретно абстракциях речь?
NePZ
4. в нагруженной OLTP базе пилят OLAP кубы/сотни отчетов и гоняют ad hoc аналитику

хороший повод писать высокопроизводительный код
NePZ
5. некоторые запросы в Mission critical системе содержат декартово произведение

почему?
12 янв 19, 12:07    [21783531]     Ответить | Цитировать Сообщить модератору
 Re: Антипаттерны на работе.  [new]
mnbvcx
Member

Откуда:
Сообщений: 170
Гавриленко Сергей Алексеевич
mnbvcx
Думаю увольняться с текущего места работы, вот то, что мне не нравится (MS SQL Server 2008/12)
Увольняйтесь. Когда в стране дефицит дворников, а вы освоить MSSQL не в состоянии оказались, то выбор должен быть очевидным.

mnbvcx
часть1
С удовольствием почитаю часть2.

Ты тоже пишешь внешние джойны в пустоту, пишешь в инсерт селект ордер бай и перестраиваешь индексы на ссд?
Тогда желаю тебе 100500 таблиц с названиями колонок column1, column2 .. column25

Про часть 2
- инлайн функции оформляются как мультистейтмент
- десятки тысяч строк загоняются в табличные переменные
- курсор на курсоре сидит и курсором погоняет
- вместо inner join используется left ("а вдруг что-то потеряется")
- селект в 1 строку оформляется как табличная функция
- в хранимых процедурах сидят представления, основанные на представлениях, которые основаны на представлениях
12 янв 19, 12:55    [21783550]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 18   вперед  Ctrl
Все форумы / Работа Ответить