Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet

iljy

Хотя бы потому, что при fillfactor 0 страниц будет МЕНЬШЕ, а никак не больше.

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

БОЛ
Примечание.
Значения коэффициента заполнения 0 и 100 равнозначны.


grif_pet
iljy

Хотите иметь собственное мнение - учите матчасть, хотите просто получить готовое решение - не спорьте о том, чего не знаете.

Где я спросил? Я спросил - мне не ответили на конкретный вопрос, но назадавали других вопросов на которые сами знают ответ. Ответ на эти вопросы - это спор?
Вы родились с матчастью уже в голове? Я в отличии от других авторов с проблемами в зннаниях пытался логически мыслить т.к. изучить предмет за 1 час невозможно.
У меня такое ощущение что кто-то пытается сейчас самоутверждаться, но мне всё равно. Ущербным себя не ощущаю т.к. знания по этим вопросам у меня ещё впереди, а по каким-то другим вопросам (не sql server) я более компетентен.

К примеру конкретные вопросы и по делу были успешно проигнорированы
DeColo®es
Хм. С какого перепугу при перемещении страниц кластерного индекса, нужно что-то менять в некластерных?

grif_pet
но как быть иначе в моей ситуации?

DeColo®es
но что ужасного в кластерном индексе по GUID? (регулярная реиндексация подразумевается)
Нормальный способ борьбы с hotspot...

если честно - я вообще не очень понимаю в чем у вас проблема. Вам надо асинхронно строить отчет? Так делайте это в джобе, они специально для асинхронной обработки предназначены. Ну или если уж хочется именно так - используйте в качестве буферной локальную временную таблицу, они для каждого сеанса свои.
18 сен 09, 17:11    [7680699]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Glory
Member

Откуда:
Сообщений: 104760
Запуск job-а. Если пользователей много, то job должен сам периодически стартовать, находить добавленные данные и обрабатывать их
18 сен 09, 17:12    [7680703]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Влом регистрироваться
Guest
DeColo®es
но что ужасного в кластерном индексе по GUID? (регулярная реиндексация подразумевается)


Потому что GUID'ы псевдослучайны и непоследовательны (если это не NEWSEQUENTIALID(), конечно). Поэтому индекс будет постоянно перестраиваться, так как вставка будет не в конец (как в случае IDENTITY, например, хотя и это не избавляет от проблемы балансировки B-дерева индекса), а в случайное место!
18 сен 09, 17:26    [7680787]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
iljy

если честно - я вообще не очень понимаю в чем у вас проблема. Вам надо асинхронно строить отчет? Так делайте это в джобе, они специально для асинхронной обработки предназначены. Ну или если уж хочется именно так - используйте в качестве буферной локальную временную таблицу, они для каждого сеанса свои.

Ну вы наверное не очень внимательно прочли первый пост темы. Повторюсь тогда вкратце с некоторыми уточнениями.
Я работаю из Navision на SQL Server`ной базе. Я реализовал функционал построения оборотной ведомости по аналитикам с помощью средств SQL Server для получения более серьёзных рузальтатов по производительности из-за отсутствия гибкости в некоторых вопросах простой среды разработки Navision и из-за того что она довольно не оптимальные запросы может использовать к БД. Для большего быстродействия и работы в том же сеансе я использовал INSTEAD OF INSERT триггер на таблице, которую я заполняю средствами Navision т.к. из Navision нельзя выполнять напрямую SQL-запросы и в том числе получить доступ ко временным таблицам SQL Server - всё только через Automation. Результаты работы SQL-запросов попадают в ту самаю блокируемую таблицу из которой в Navision отображаются данные и они нужны лишь до тех пор пока пользователь не закроет форму или достроится отчёт.
А с Джобом вы имеете ввиду такой метод, когда вместо INSTEAD OF INSERT триггера таблицы заданий он периодически отрабатывая будет проверять наличие заданий в этой таблице и выполнять их? Тогда получается какое-то распараллеливание жёсткое и будет состояние гонки, которое я так на вскидку пока не представляю как разрешить без ещё больших извращений, которые могут присти непонятно к чему в дальнейшем.
18 сен 09, 17:28    [7680805]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Влом регистрироваться

Потому что GUID'ы псевдослучайны и непоследовательны (если это не NEWSEQUENTIALID(), конечно). Поэтому индекс будет постоянно перестраиваться, так как вставка будет не в конец (как в случае IDENTITY, например, хотя и это не избавляет от проблемы балансировки B-дерева индекса), а в случайное место!

Ну так для этого ж всё и затевалось, чтобы страницы разных пользователей редко пересекались и возникали блокировки.
18 сен 09, 17:31    [7680819]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Влом регистрироваться
Guest
grif_pet

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

Логично, только перестроение индекса затрагивает всю таблицу. Если версия сиквела 2005+, то попробуйте включить версионник, часть блокировок пропадет.
18 сен 09, 17:35    [7680833]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Раньше я использовал подключение 'Microsoft ActiveX Data Objects 2.6 Library' из Navision, но тут куча минусов. Видимо придётся возвращаться к этому методу
18 сен 09, 17:35    [7680837]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Влом регистрироваться

Логично, только перестроение индекса затрагивает всю таблицу. Если версия сиквела 2005+, то попробуйте включить версионник, часть блокировок пропадет.

Т.е. выходит почти любая вставка всё равно залочит почти всю таблицу? Сиквел 2000
18 сен 09, 17:36    [7680847]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Glory
Member

Откуда:
Сообщений: 104760
grif_pet
iljy

если честно - я вообще не очень понимаю в чем у вас проблема. Вам надо асинхронно строить отчет? Так делайте это в джобе, они специально для асинхронной обработки предназначены. Ну или если уж хочется именно так - используйте в качестве буферной локальную временную таблицу, они для каждого сеанса свои.

Ну вы наверное не очень внимательно прочли первый пост темы. Повторюсь тогда вкратце с некоторыми уточнениями.
Я работаю из Navision на SQL Server`ной базе. Я реализовал функционал построения оборотной ведомости по аналитикам с помощью средств SQL Server для получения более серьёзных рузальтатов по производительности ...<skipped>

Не понял. У вас клиент делает insert в какую то таблицу и ждет окончания построения оборотной ведомости, которую запускает ваш триггер ? Типа предпросмотр, как введенные данные меняют отчет ?
18 сен 09, 17:42    [7680879]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Glory
Не понял. У вас клиент делает insert в какую то таблицу и ждет окончания построения оборотной ведомости, которую запускает ваш триггер ? Типа предпросмотр, как введенные данные меняют отчет ?

Да не предпросмотр, а само формирование оборотки. А так всё верно.
1) занесли параметры в таблицу с триггером
2) триггер отработал и записал результат в буферную таблицу
3) то что записано в буферной таблице отображается на форме/отчёте
4) после закрытия формы или завершения построения отчёта содержимое буферной таблицы используемое для этого сеанса удаляется
18 сен 09, 17:47    [7680914]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
Влом регистрироваться
Логично, только перестроение индекса затрагивает всю таблицу.
С этого места можно поподробнее ? Каким образом ?
18 сен 09, 17:49    [7680921]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Glory
Member

Откуда:
Сообщений: 104760
grif_pet
Glory
Не понял. У вас клиент делает insert в какую то таблицу и ждет окончания построения оборотной ведомости, которую запускает ваш триггер ? Типа предпросмотр, как введенные данные меняют отчет ?

Да не предпросмотр, а само формирование оборотки. А так всё верно.
1) занесли параметры в таблицу с триггером
2) триггер отработал и записал результат в буферную таблицу
3) то что записано в буферной таблице отображается на форме/отчёте
4) после закрытия формы или завершения построения отчёта содержимое буферной таблицы используемое для этого сеанса удаляется

И почему триггер не может вызвать job с процедурой формирования отчета, а пользователь просто подождать, пока этот отчет сформируется ?
18 сен 09, 17:49    [7680922]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Честно говоря я думал что джобы выполняются только по расписанию или вручную запускаются из EM. Это не так? Т.е. можно запустить Джоб из триггера и сеанс будет "ждать" пока джоб завершит работу и в итоге получится как раз самая что ни на есть изолированная транзакция?
18 сен 09, 17:53    [7680953]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet
Glory
Не понял. У вас клиент делает insert в какую то таблицу и ждет окончания построения оборотной ведомости, которую запускает ваш триггер ? Типа предпросмотр, как введенные данные меняют отчет ?

Да не предпросмотр, а само формирование оборотки. А так всё верно.
1) занесли параметры в таблицу с триггером
2) триггер отработал и записал результат в буферную таблицу
3) то что записано в буферной таблице отображается на форме/отчёте
4) после закрытия формы или завершения построения отчёта содержимое буферной таблицы используемое для этого сеанса удаляется


пункт 4 - почему таблица не может быть локальной временной для данного сеанса? назовите хоть одну причину.
18 сен 09, 17:55    [7680971]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet
INSTEAD OF INSERT триггер на таблице, которую я заполняю средствами Navision т.к. из Navision нельзя выполнять напрямую SQL-запросы и в том числе получить доступ ко временным таблицам SQL Server - всё только через Automation.


что значит через Automation? ADO? Или какой-то другой механизм?
18 сен 09, 17:57    [7680985]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
Glory
Member

Откуда:
Сообщений: 104760
grif_pet
Честно говоря я думал что джобы выполняются только по расписанию или вручную запускаются из EM. Это не так? Т.е. можно запустить Джоб из триггера и сеанс будет "ждать" пока джоб завершит работу и в итоге получится как раз самая что ни на есть изолированная транзакция?

Джоб вполне себе можно запускать документированной процедурой sp_start_job
Только запуск этот как раз асинхронный. Т.е. вы не ждете окончания job-а
Правда нужно разобраться, как у вас там авторизация настроена. Все под одним логином работают ?
18 сен 09, 17:58    [7680992]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
iljy

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

Да я к ней просто не достучусь из навижена в том же сеансе

iljy
что значит через Automation? ADO? Или какой-то другой механизм?

ну да, ADO
18 сен 09, 17:59    [7681000]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet
iljy

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

Да я к ней просто не достучусь из навижена в том же сеансе

Да почему же не достучитесь-то?? она для вашего сеанса локальна, но существует все время пока есть сеанс!

grif_pet

iljy
что значит через Automation? ADO? Или какой-то другой механизм?

ну да, ADO

эээ... и вы считаете что ADO не позволит вам выполнить запрос? Откуда такая информация?
18 сен 09, 18:01    [7681006]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Glory

Джоб вполне себе можно запускать документированной процедурой sp_start_job
Только запуск этот как раз асинхронный. Т.е. вы не ждете окончания job-а
Правда нужно разобраться, как у вас там авторизация настроена. Все под одним логином работают ?

С асинхронным без ожидания боюсь не выйдет. Все работают под разными логинами своими, но в принципе есть служебный логин для подключения через ADO
18 сен 09, 18:01    [7681007]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
iljy

Да почему же не достучитесь-то?? она для вашего сеанса локальна, но существует все время пока есть сеанс!

Я понимаю что она будет существовать, но средства Navision имеют доступ только к таблицам созданным из Navision средствами Navision и создавать эти таблицы нелльзя динамически. Есть механизм работы со временными таблицами идентичными по структуре с уже существующей. Но я пока не знаю как можно узнать её имя в SQL Server на лету


grif_pet

эээ... и вы считаете что ADO не позволит вам выполнить запрос? Откуда такая информация?

Позволит, но не в текущем сеансе. Тему как раз завёл для организации работы в том же сеансе
18 сен 09, 18:06    [7681035]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet
iljy

Да почему же не достучитесь-то?? она для вашего сеанса локальна, но существует все время пока есть сеанс!

Я понимаю что она будет существовать, но средства Navision имеют доступ только к таблицам созданным из Navision средствами Navision и создавать эти таблицы нелльзя динамически. Есть механизм работы со временными таблицами идентичными по структуре с уже существующей. Но я пока не знаю как можно узнать её имя в SQL Server на лету

о как... сурово. Так создайте таблицу с соответствующей структурой, пустую, а имя временной у вас будет #temp, и узнавать его на лету не придется.
18 сен 09, 18:08    [7681046]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
grif_pet
Member

Откуда:
Сообщений: 253
Я попробовал создать в Navision временную таблицу на основе таблиы Test и ни по имени #Test, ни по имени ##Test она из того же соединения в SQL не была доступна. Попробовал в навижене описать
_TMP	Record	Test	Temporary
  _TMP.int1 := 31285;
  _TMP.INSERT;
  FOR _i:= 1 TO 31284 DO
  BEGIN
    _TMP.int1 := _i;
    _TMP.INSERT;
  END;
  _TMP.GET(31285,0);
  MESSAGE(FORMAT(_TMP.int1));
и запустил профайлер для всех событий - пусто. Надо поискать информацию на навиженских форумах про реализацию работы со временными таблицами, но видимо этот вариант отпадает.
18 сен 09, 18:29    [7681132]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
iljy
Member

Откуда:
Сообщений: 8711
grif_pet,

а если так - триггер формирует отчет во временной таблице, затем данные сливаются в буферную? На ней кластер можно сделать IDENTITY, вставка будет быстрая, и вообще время конкуренции за эту таблицу получается сильно меньше.
18 сен 09, 18:38    [7681161]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Влом регистрироваться
Логично, только перестроение индекса затрагивает всю таблицу. Если версия сиквела 2005+, то попробуйте включить версионник, часть блокировок пропадет.
При чем тут перестроение индекса? Если задать разумный филфактор и настроить реиндексацию с соответствующей частотой, не будет не то, что перестроения индекса - расщепления страниц не возникнет.
18 сен 09, 18:49    [7681196]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с вложенными транзакциями и блокировками  [new]
ChA
Member

Откуда: Москва
Сообщений: 10989
DeColo®es
Если задать разумный филфактор и настроить реиндексацию с соответствующей частотой, не будет не то, что перестроения индекса - расщепления страниц не возникнет.
Увы, не факт. Снизить частоту, конечно, можно, но полностью избавиться от расщепления нельзя в принципе. Иначе куда бы записи вставлялись, страницы-то не резиновые, рано или поздно какую-то понадобиться расщепить :) Впрочем, не считаю расщепление слишком уж большой трагедией.
18 сен 09, 19:11    [7681259]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить