Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Скорее упрощение механизмов. Мне кажется вы недопонимаете. Лог/грязные страницы/... скидывается на диск как-то?! Какой-то внутренней системной "функцией". И почему вместо её повторного использования, надо повторно использовать высоко-уровневые абстракции типа таблица? Странно как-то вы рассматриваете программную архитектуру скуля. Я рассматриваю некоторые решения как упрощение пользователю во внешнем менеджменте сервера. С ещё одной базой типа легче управляться чем с чем-то менее похожем (дополнительные темповыми файлами сервера).
Может вы имеете что те пару кило/мегов другого кода (вместо кила костылей) настолько тяжеелее поддерживать чем то гигантское разнообразие текущего функционала?
Я вместо @ тупо подставил # таблицу и вижу что @ "жрёт" меньше. Может вы исправите тест ? (вы в этом разбираетесь)
|
||||||
2 июл 13, 01:36 [14507852] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
|||||||
2 июл 13, 11:34 [14509276] Ответить | Цитировать Сообщить модератору |
Александр52 Member Откуда: Кокосовые острова ส็็็็็ Сообщений: 5134 |
Поднять Sphinx, построить его индекс - получаете сумасшедшую производительность \ скорость. http://sphinxsearch.com/ |
||
2 июл 13, 11:36 [14509297] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
![]() "Амёба и человек практически идентичны ибо животные." Что за категории "аргументов"?
И во вторых, нет такого однозначного (физически одно-вариантного) понятия как "транзакционность". ибо её (и много других вещей) можно реализовать физически множествами способов.
Более того, используя туже самую вашу "логику" - memory table в 2014 также "практически те же таблицы" - нет смысла реализовывать. Но их же реализовали. invm, вы же гуру и знаток внутренностей скуля. Я не понимаю почему сейчас вы занимаете поверхностно схоластикой? А логика советов не использовать табличные переменные из спама лога, в таком ракурсе вообще выносит моск.
Но в тесте ниже я убрал какие либо ограничения по транзакциям - т.е. сюда попали действия со созданию и уничтожению таблиц и их метаданных.
Как мы видим, хотя по таблице лог меньше в случае обворачивания в одну транзакцию, но он всётаки зависит от количества команд в батче. В архиве все логи, для проверок "аномалий". Ну и вопрос, почему так разнятся логи. Скорее у вас могут быть другие результаты, ибо версия по рукой: 2008 R2 (RTM) - 10.50.1600.1 (X64). Видно, что не так всё однозначно. В среднем, чаще применяются времянки для хранения временных результатов. Т.е. один раз заганяются данные и потом юзаются. Поэтому табличные переменные не так уж плохо. IMXO Даже при идеатической реализации. PS: В скуле есть автономные транзакции ![]() К сообщению приложен файл (Log.zip - 31Kb) cкачать ![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||
2 июл 13, 22:32 [14513259] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Некто пытается сесть invm-у на голову. ![]() |
4 июл 13, 00:48 [14519775] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Ок, зайдем с другой стороны, раз аргумент не подошел: как по вашему, временные таблицы и табличные переменные должны удовлетворять ACID? И даже не ACID. Давайте остановимся на AC из ACID.
|
|||||||||||||||||||||||||||||||||||||||||||||||
4 июл 13, 11:45 [14521136] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
![]()
Consistency - не применим в текущей реализации. Но это отдельная большая под-тема: FK на времянки это абзац. :) Atomicity - это верно, должно! Но это тоже тема, ибо в общем виде Atomicity должно быть верно и для всей транзакции в целом, а @ не откатишь. C другой стороны убрать атомарность до уровня строки - тоже фишка, типа можно найти где рубанулось. :) На стандартный лог накладывается свойство Integrity (целостность) что не нужно в данном случае и не надо путать его с атомарностью. Лог решает обе вещи, т.е. его стратегия заточена именно для этого. Но в целом я согласен - он не так уж плохо решает задачу, если учесть то что лог tempdb совсем другой, чем лог обычной базы. Коммит в нём не сбрасывает его на диск. Т.е. да - в памяти он генерится - но до диска это не доходит. Следовательно стоимость это лога может быть на порядок дешевле чем обычного. Но в сравнении @ и # это второстепенно. Возможно вообще до диска доходят не все транзакции. Но это надо подтвердить. Но возникает вопрос: Атомарность каждой операции определяется соответствующими записями в логе. Т.е. что для @, что для # каждая операция атомарна и чуть ли не идентичны процессы. Но почему для @ дороже ? Как я понимаю атомарность работает как хранение операцией ссылки на последний элемент лога перед началом этой операции. Сама эта атомарность для целостности данных не нужно - в логе нет этих пометок. Только в случае откатов операции. А в случае @ скуль делает глупость - создаёт транзакцию каждый раз, хотя мог бы сделать одну для всей сессии, для всех этих @. Более того, для всех неявных транзакций можно использовать туже стратегию SavePoint-ов. Экономия на спичках. Неужели пора писать Suggestion на connect.microsoft.com ? ![]()
Recompile, как я понимаю, убивает оптимизацию скуля, при котором он сохраняет структуру таблицы и повторно её использует для всех её вызовов. Т.е. типа таблица для всех одна, но с внутренним идентификатором процесса/вызова: @ же не может мутировать в отличие от #. И накладные расходы для @ и # будут разные. Т.е. для статического кода @ эффективнее чем # - метаданные стабильны. А # для процедурных императивистов, любителей простыни запутанного кода и курсоров. ![]()
Надо протестировать и так и так. (Без recompile - надо как-то делать первый прогон. Кстати, как делать принудительный CheckPoint?) Ваш тест чисто показывает именно случай использования Recompile. А повышенный набор логов навевает что там затесалось ещё компиляция и элементы уже бесполезной оптимизации. Ещё можно подсчитать стоимость подсчёта статистики для #. PS: Спасибо что вы продолжаете копать дальше. |
|||||||
4 июл 13, 16:10 [14523290] Ответить | Цитировать Сообщить модератору |
andrey odegov Member Откуда: Сообщений: 473 |
declare @i int = 1; begin transaction; set @i += 100500; rollback; select @i; |
||||
4 июл 13, 16:15 [14523320] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Mnior: Почему 2 + 2 = 5, а не 4 ? andrey odegov: Патамушта 2 + 2 = 4
Не сбивайте invm с мысли. ![]() |
||
4 июл 13, 16:43 [14523538] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Всё от классификации зависит. Захотели — отнесли к царству животных, захотели — сделали отдельное царство простейших. В школьном учебнике биологии у нас было такое разделение: — Царство Вирусы; — Царство Доядерные организмы (или Бактерии); — Надцарство Ядерные организмы, в которое входят три царства: Учебник был написан в 1980-е годы. Не думаю, что сейчас он катастрофически устарел. Согласно той классификации, амёба была как раз животным — синтезировать органические вещества из неорганики не умеет, потребляет в пищу органику (более того, по факту является хищником), способна самостоятельно передвигаться и т.п. :-) |
||
4 июл 13, 17:01 [14523646] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Это вот такое? CREATE TABLE КопияМоейПрелести (LIKE МояПрелесть)
А почему бы тогда не как в Oracle. Один раз, заранее, создали временную таблицу — всё, метаданные фиксированы, времянкой можно пользоваться без предварительного CREATE TABLE. |
||||
4 июл 13, 17:14 [14523726] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
PostgreSQL 9.2.4 Documentation / CREATE TABLE CREATE TABLE capitals ( state char(2) ) INHERITS (cities);Таблиц может быть несколько. Но это
А если мне нужно несколько таблиц одновременно? Плодить копии? И как там кстати, завязано на текущем скоупе или "сам следи"? |
||||||
4 июл 13, 20:28 [14524542] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Не очень понял, о каких таблицах идёт речь.
При создании временной таблицы можно указать одну из двух опций: — ON COMMIT PRESERVE ROWS — это значит, что данные, вставленные во времянку, остаются там до окончания текущей сессии; — ON COMMIT DELETE ROWS — значение по умолчанию, данные из времянки удаляются при завершении транзакции. С одной стороны, заранее созданные времянки в Oracle удобны тем, что позволяют отслеживать раскомпилированные объекты БД. С другой стороны, в MSSQL любой пользователь, имея лишь права на коннект к серверу, может создавать времянки с любой структурой. Это может быть удобно, например, для отладки. В Oracle же для создания времянки нужны права CREATE TABLE, которые есть далеко не у всех.
|
|||||
5 июл 13, 12:06 [14526719] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
invm: 14523290 |
||||
6 июл 13, 01:02 [14530526] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Так что без recompile мы емеем скрытый оверхед в журнале для @. |
||||||||||||
7 июл 13, 23:59 [14533606] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
![]()
Не знаю, зачем вы это написали. Но оно либо работает полностью или не работает. Видимо в продолжение софистических аналогий, забавы ради.
Дело только в логе и не более, точнее в его организации. Вы скорее намекаете на некий не озвученный механизм внутреннего взаимодействия идентификаторов транзакций. Аля две транзакции не видят друг друга. Ерунда, естественно что нельзя поменять болт, и не поменяв при этом гайку. Полное отсутсвие Consistency&Atomacy - полное отсутствие всяких "логов". Недо-Consistency&Atomacy естественно что-то недо-логи. Тупое писание сплошняком, без всяких "отметок" (спама недо-транзакций). Думал вы приведёте другой "аргумент" (опять мне надо чужие ходы продумывать, ку) - что отметки могут позволить пропускать записи лога закрытых мелких транзакций - меньше нагрузка на диск. Но мне кажется этот вариант затрудительным пока. А во вторых узнать можно о точке отката просто из текущей операции.
Но главное, на основе ваших утверждений (жаль что про это нельзя прочитать где либо есчё по подробнее) уже проявляется картинка, аля сервис брокер лайт версия для процедурок. ![]() Случаем вы не учились в тайной академии по знанию скуля, а то пару коментов и сразу пару мегаблоков в понимании архитектуры. И только по инвайту? Короче завидую вашему терпению. Меня вот всё не оставляет другое. Лог в текущем формате всётаки направлен на надёжность и даже быстрое восстановление после сбоев. А в силу того что ещё Glory упоминал про всякое свопирование, то и подавно мне не нравится текущая реализация недо-атомарности @. (не говоря о излишнего спаминга недо-транзакций) Зачем писать новое+старое значение? Можно только старое - для отката и не более. Зачем вообще писать это в почти-базу? Да я бы даже согласился использовать Single-Insert-Only времянки (log-less). Для всего остального (паиграца) есть #. |
||||||||||||
9 июл 13, 03:13 [14538999] Ответить | Цитировать Сообщить модератору |
роллбэк
Guest |
если Вы про TempDB, то в ее лог и так пишется только старое. именно что "для отката и не более" |
||
9 июл 13, 09:55 [14539499] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
|
||
9 июл 13, 10:19 [14539611] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
|
||||
9 июл 13, 11:06 [14539856] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Ну и
ЗЫ: MS не придумал ничего нового в WAL. В SQL Server используется протокол ARIES. |
|||||||||||||||
9 июл 13, 11:39 [14540072] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
Не знаю как в 2012, а в 2008р2 я отмечал случаи, когда на большом количестве длинных строк чексам давал одинаковые суммы для РАЗНЫХ строк. |
9 июл 13, 11:41 [14540095] Ответить | Цитировать Сообщить модератору |
Cammomile Member Откуда: Сообщений: 1214 |
2. Ещё был вопрос: когда целесообразно использоват temporary table, а когда table variable ? Когда @ дает выигрышь по времени Когда надо протащить данные сквозь транзакцию. #все прочие случаи когда надо сохранять промежуточный результат к тому же # гораздо удобнее в отладке |
9 июл 13, 11:55 [14540204] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Не ставьте это в тиски. Вы говорите о виртуальных понятиях, я только о физики лога. Эта "транзакция" не как не связана с реальной транзакцией - это всего лишь идентификатор логе. Текущий TVQuery - это также псевдо-транзакция. Никаких взаимодействий с другими процессами она не имеет и бессмысленна. Она нужна для идентификации своих записей в общем логе - не более. Я плохо разжёвываю? Смотрите. Не считая времянки - всё просто. Один идентификатор в логе на всю транзакцию. Один на все изменения. Атомарность команды также - одна ссылка на лог. Если что: * Откат команды - возврат всех действий по всем таблам до ссылки (в оперативе) * Откат транзакции (включая сбой) - возврат до физической метки "начало транзакции". В случае нарушения CA @ обязана иметь отдельный механизм. Текущая ситуация - имеется второй идентификатор псевдо-транзакция TVQuery. В случае отката команды - откатывается и как в рамках основной транзакции, так и в рамках псевдо. Нужна ли физическая метка в логе для этой псевдо TVQuery? Нет, ибо текущая команда и так хранит в оперативе ссылки. Проблема в другом - идентификация этих записей - вот я и предложил, что ссессия автоматом имеет некий идентификатор псевдо-транзакции для всех времянок. Максимум одна запись физической метки на всю ссессию.
![]()
Уникальность тут совершенно не причём. Совершенно. Даже в рамках многопользовательской среды. Уникальность, да как и многое другое определяется фундаментальной физикой локировок - правильной последовательностью команд. Независимо от того кто этим инструментом пользуется и имеется ли механизмы поддерживающие атомарность или что-то другое.
Хотя я не очень понимаю зачем что-то писать в самом начале - когда для undo пойдёт лишь одна команда ClearAll.
Если стандарт (движок) то это много чё объясняет. ![]()
|
||||||||||||||||||||||||||
9 июл 13, 13:44 [14541062] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Ах да.
![]() Меня это не напрягало ни в одних языках, даже более того мне не нравится последняя тенденция "а напишу абы как в отладке всё поправлю". Ленимся господа. Спелчекер меня отупляет писать правильно.
Лог другой, алгоритмы другие. Тут вольно делать всё по другому чем в "обычной базе". |
||||
9 июл 13, 14:50 [14541586] Ответить | Цитировать Сообщить модератору |
Mnior Member Откуда: Кишинёв Сообщений: 6723 |
Польза в том что в принципе на времянки не действую ни TIL ни локировки, вааще. Ибо уровень взаимодействия - это менеджмент ресурсов - странички. Просто лучше думать не как "чё урезать" из имеющегося, а "что необходимо" какретна, в отрыве от имеющихся механизмов. |
||||
9 июл 13, 15:14 [14541754] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |