SQL7,ODBC и IPX

Sergey
Дата: 05.03.2001 21:33:22
Несчастья стали преследовать меня после того, как установил SP3 на SQL 7.0. Про одно я писал "Ноги выташили, хвост завяз".
Теперь еще одна интересная картина: Все клиенты SQL рапотают по Name Pipes, но есть несколько машин на котырыхпомимо NetBios установлен IPX32.Здесь наблюдается значительные тормоза при работе с SQL, хотя если просто файлы по сети перекачивать, то все летает, но это не самое страшное. Недавно заметил, что одна машина, на которой установлен IPX от MicroSoft вешает систему намертво,понаблюдал за ней через SQLProfiler и заметил "замечательную вещь": если машина выполняет большую (с большим количеством запросов) хранимую процедуру, то она не всегда выполняет все строки до конца, т.е. я не всегда вижу SP Completed. А завершиться процедура может в любом месте, и даже сразу после begin tran не дождавшись завершения или отката транзакции. При этом соединение не разрывается, и приложание продолжает выполнять следующие запросы, что в конечном итоги и приводит к зависанию системы.
Что делать в этой ситуации? Очень не хочется верить, что нестандартной тачкой можно порушить SQL Server,но после дырки с зашитой временных ХП, которая обсуждалась в этом форуме ранее, готов поверить во что угодно.

P.S. Приложения работают через ODBC, очень активно используя SQLPrepare.
DmitryGolubev
Дата: 06.03.2001 00:26:15
Была похожая проблема
По-моему дело в том, что происходит ощибка при исполении stored proc и он на этом операторе вываливается, но успешно продолжает работать дальше ( глупость, но так было, пока не нашел буг). Советую проверить, как исполняется stored proc-а.
Sergey
Дата: 06.03.2001 11:18:32
Дп проверял, вываливается в абсолютно разных местах, хотя есть еще порядка 50 машин где все работает на ура. Единственное ее отличие от других- наличее протокола IPX. Есть резервный сервер MSSql 7.0+SP2, там эта машина работает идеально. Но дело, насколько я понял не в клиенте, он ведь просто комманды дает. Его скорее всего сервер маленько неправильно понимает. Только непонятно, что ему так не нравиться?
Garya
Дата: 06.03.2001 16:59:28
Насколько необходимо использовать смесь протоколов? Я сталкивался с проблемами при одновременном использовании в одной сети протоколов TCP/IP и IPX/SPX. Некоторые горбатые форточки упорно сначала пытаются использовать IPX/SPX, даже если в качестве протокола по умолчанию стоит TCP/IP. Именно при смешении протоколов возникали жуткие тормоза. При использовании только одного из этих протоколов все крутится гораздо быстрее. Рекомендую TCP/IP - если все грамотно настроить, то все просто летает.
P.S. Скорее всего, это вопрос не по SQL Server, а по протоколам и операционным системам.
Sergey
Дата: 06.03.2001 18:10:02
Протокол IPX нужен, т.к. помимо SQL Server используется еще Novell.Да и дело не в тормозах, а в зависаниях.Ведь получается что нестандартный клиент может парализовать работу всей системы.Вот и хотелось бы знать как вывернуться из этой ситуации
Sergey
Дата: 06.03.2001 18:12:12
И еще, самое главное, если процедура процедура прервется на операторе begin tran, то транзакция остается открытой на протяжении всего соединения, что в конечном счете и приводит к множественным взаимным блокировкам и зависанию.
DmitryGolubev
Дата: 06.03.2001 19:22:44
Я вспомнил в чем у меня был проблем
Проблем был в правах доступа к таблице, из которой у меня шел select.
остальное см. выше
Александр Гладченко
Дата: 06.03.2001 20:41:51
Sergey, а чъя реализация IPX у Вас используется, Microsoft или Novell?
Кроме того, развязаны ли у вас протоколы по разным типам сетей, IPX только для NetWare, а IP (или NetBEUI) только для Microsoft сети?
Каой фрейм у Вашего IPX?
Кстати, обе операционки поддерживают TCP/IP и можно ограничиться только одним протоколом.
В моей реализации, SQL сервер в мультипротокольной сети работает без проблем.
Sergey
Дата: 06.03.2001 21:00:46
Александр,
На этой машине Win 95, IPX Microsoft, привязка к клиентам Microsoft и Netware. TCP/IP вообще не используется.
Но на данный момент эту машину законсервировали для опытов, и интересно не как исправить данного клиента, а как настроить сервер SQL таким образом, чтобы подобного рода клиенты не могли повлиять на качествр его работы, и уж тем более остановить работу системы. Дело в том, что работа организована таким образом, что нет возможности проконтролировать все рабочие станции в сети,и не исключено, что завтра в сети появится аналогичная машина, которая завесит всех.
alexeyvg
Дата: 07.03.2001 15:56:34
To:Sergey
Вообще, что-бы избежать этого, нужно после (или перед) любых (или некоторых) вызовов запускать if @@rtancount > 0 rollback tran. Если весь доступ через ХП, то это можно ставить в начале каждой ХП и потерь производительности не будет.
Кстати, Вы пишете "активно используя SQLPrepare". Вам будет интересно узнать, что при некотором сочетании условий (сетевых протоколов версий АДО и SP SQL) то-же самое происходит в АДО; возможно, по той-же причине. Если сделать объект Command, то при исполнении других команд в этом-же коннекте творятся странные вещи. Т.е. правильно - создать Command, выполнить, забрать результат и объект уничтожить. Тогда всё нормально. Как я понимаю, Command использует SQLPrepare.