powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Процедура t-sql
25 сообщений из 33, страница 1 из 2
Процедура t-sql
    #39330599
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
День добрый!
Разбирал старый код, часто встречается конструкция типа
Код: sql
1.
set @sep = trim(@sep||'');



Подскажите плз, что означает выражение внутри функции trim?
...
Рейтинг: 0 / 0
Процедура t-sql
    #39330747
Бумбараш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soo,

481386
...
Рейтинг: 0 / 0
Процедура t-sql
    #39330978
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
|| - текстовая конкатенация.
конкатенация с пустой строкой - полу-явная конвертация значения в текст из любого типа который может быть конвертирован в текст.
set @var - то, за что нужно бить больно по рукам. set - команда WatcomSQL, @ - необходимый символ для переменных из TransactSQL и опциональный для WatcomSQL. Точка с запятой в конце строки тоже из WatcomSQL.
Вывод - у ТС одна из старых версий ASA с которой работал человек привычный к Transact'у. Но на самом деле он работает с WatcomSQL и соврал в заголовке темы.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331182
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
White Owl Но на самом деле он работает с WatcomSQL и соврал в заголовке темы.

Стоит ASA 9.0.2.3951. В настройках стоит Transact-SQL
Мне дали разбирать АСУП, написанную до 2010 года, так как она начала жёстко лагать. Я думаю, что из-за процедур обработки данных, которые зачем-то сделаны в 32-разрядной версии ASA, а не в языках, которые больше для этого предназначены (здесь используется PHP).

Думаю, здесь лучше выложить всю функцию, так как мне не совсем понятно, нафига вообще нужна конвертация значения в текст, если переменные итак объявлены как VARCHAR. Функция во вложениию
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331190
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
SooWhite Owl Но на самом деле он работает с WatcomSQL и соврал в заголовке темы.

Стоит ASA 9.0.2.3951. В настройках стоит Transact-SQL

А в мануале к базе с описанием языка он назван как ASA SQL
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331203
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Soo]White Owl
Думаю, здесь лучше выложить всю функцию, так как мне не совсем понятно, нафига вообще нужна конвертация значения в текст, если переменные итак объявлены как VARCHAR. Функция во вложениию

Эта конструкция позволяет избавиться от null в переданном параметре
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331221
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
[quot pand]Sooпропущено...


Эта конструкция позволяет избавиться от null в переданном параметре

А IFNULL или ISNULL в этом смысле хуже будут? Мне просто хочется понять логику писавшего
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331248
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Soo]pandпропущено...


А IFNULL или ISNULL в этом смысле хуже будут? Мне просто хочется понять логику писавшего

White Owl||Вывод - у ТС одна из старых версий ASA с которой работал человек привычный к Transact'у. Но на самом деле он работает с WatcomSQL и соврал в заголовке темы.

Думаю что в этом вся логика в этом
а еще мне не понятна ваша фраза

Soo Я думаю, что из-за процедур обработки данных, которые зачем-то сделаны в 32-разрядной версии ASA

если логика написана на SQL то она с легкостью будет работать и на 128-разядной архитектуре
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331343
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
pand
пропущено...

Думаю что в этом вся логика в этом
а еще мне не понятна ваша фраза

пропущено...

если логика написана на SQL то она с легкостью будет работать и на 128-разядной архитектуре

Да дело в не в архитектуре как таковой, а в нехватке оперативы. Плюс, большое количество процедур, которые создают временные таблицы и потом их не удаляют, сильно раздули саму базу.
В связи с этим у меня и встала задача - перенести логику в PHP, где с мусором в памяти проблем не будет. А для этого нужно понять, чего же хотел автор всего написанного.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331415
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SooДа дело в не в архитектуре как таковой, а в нехватке оперативы. Плюс, большое количество процедур, которые создают временные таблицы и потом их не удаляют, сильно раздули саму базу.
В связи с этим у меня и встала задача - перенести логику в PHP, где с мусором в памяти проблем не будет. А для этого нужно понять, чего же хотел автор всего написанного.
Если честно, пока не увидел аргументов переноса кода обработки данных на PHP. Кроме наверно если автору так будет легче сопровождать и развивать.
Оператива добавляется, если надо ставиться ASA х64. Мусор , лаги и тормоза базы - если и преодолевают переводом обработки данных на PHP, то в последнюю очередь. Для начала можно попробовать другие методы.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331448
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
antand,

А что, ASA 9 так хорош, что лучше не переносить на PHP? Скажу честно, на РНР мне прогать приятнее ибо он мне знаком больше. Тем более, что тут код в ASA проанализировали как смесь бульдога с носорогом. Этой базой занимаюсь только я и мне её поддерживать ещё долгое время.
Я согласен, параметры системы обновляются, но у нас как всегда - да, обновить надо, но на сервера денег нет. Поэтому когда это будет? То же самое программная платформа - её надо покупать.

Что касается самой ASA - здесь временные таблицы удаляются только при перезагрузке системы. Так как предприятие работает круглосуточно, остановка базы недопустимо. А РНР освобождает память сразу, это его существенный плюс. Кроме этого, я считаю что программировать в ASA - это костыли. Сам язык РНР гораздо гибче и функциональнее. Плюс, есть фреймворки.

К чему привело длительное использование ASA я написал. Исправить утечки памяти довольно сложно, так как в базе порядка 850 различных функций и процедур и их временные таблицы очень сильно переплетаются друг с другом, поэтому, думаю, проще постепенно развязать весь этот клубок и перенести в РНР, там я хотя бы буду знать что к чему. Ну и задокументирую сразу, чтобы потом можно было вспомнить.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331506
pand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sooantand,

А что, ASA 9 так хорош, что лучше не переносить на PHP?

Если речь идет о работе с базой данный то Да головы на три выше чем PHP и в первую очередь по бістродействию.

Sooantand,
Скажу честно, на РНР мне прогать приятнее ибо он мне знаком больше. Тем более, что тут код в ASA проанализировали как смесь бульдога с носорогом. Этой базой занимаюсь только я и мне её поддерживать ещё долгое время.

Это достаточный аргумент чотбы обеспечить себя работой ( или головняком ) на многие годы .

Sooantand,
Кроме этого, я считаю что программировать в ASA - это костыли. Сам язык РНР гораздо гибче и функциональнее. Плюс, есть фреймворки.

Что-бы делать такие заявления нужно хотябы лет 5 на ней попрограммировать . В противном случае Вы просто "не умеете их готовить". SQL синтаксис у ASA очень даже дружественный .

Sooantand,
К чему привело длительное использование ASA я написал. Исправить утечки памяти довольно сложно, так как в базе порядка 850 различных функций и процедур и их временные таблицы очень сильно переплетаются друг с другом, поэтому, думаю, проще постепенно развязать весь этот клубок и перенести в РНР, там я хотя бы буду знать что к чему. Ну и задокументирую сразу, чтобы потом можно было вспомнить.

Здается мне, все это от того, что вы ее пользуете не правильно
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331541
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Soo,
Вы несколько противоречите себе, а вообще, судя по всему человек, создававший базу хорошо знал оракл, отсюда и растут ноги использования t-sql, а не нативного диалекта watcom sql, а аса выбран был за малое потребление этим движком ресурсов. Теперь по поводу процедур обработки, не думаю, что перенос чего-то в php как-то превысит в скорости sql-диалект аса, и тот и другой движок - интерпретаторы, да и временные таблицы в базе в своем большинстве, я думаю, используются от не знания возможностей аса. Вообщем все в ваших руках, с учетом того, что вам ее надлежит поддерживать длительное время, начните с изучения аса, создания бекапов его баз, кстати, когда делали последний раз бекап и как его делали, размер лога сейчас какой?
теперь по поводу лагает, это абсалютно не из-за 32-разрядной версии аса, вполне возможно процедуры не убирают за собой мусор, может еще что-то...
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331562
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
Sergey OrlovSoo,
теперь по поводу лагает, это абсалютно не из-за 32-разрядной версии аса, вполне возможно процедуры не убирают за собой мусор, может еще что-то...
У меня на компе 4 гига оперативы. ASA в момент съедает 1 гиг и начинает лагать - очевидно, что оперативы ей не хватает. Отсюда вывод проблемы в разрядности. Возможно, в будущем мне удастся увеличить у себя на тачке память, тогда и буду пробовать расширять возможности ASA.
Переписывать всё подряд я не собираюсь, только то, что лагает. Согласитесь, когда процедура выполняется 117 сек - это не очень быстро. Притом, что она делает не так уж и много.
Теперь про мусор. Временные таблицы создаются таким образом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 create table #tmp_buffer(prod_group varchar(32), on_begin numeric(12,3), arrival numeric(12,3), 
		loaded numeric(12,3), produced numeric(12,3), shipped numeric(12,3), on_end numeric(12,3),
        inv_add numeric(12,3),inv_del numeric(12,3), op_prod varchar(32),
        prod_id bigint, unit_id bigint, weight numeric(12,3), 
        on_begin_tube numeric(12,3),shipped_tube numeric(12,3),on_end_tube numeric(12,3),
        len numeric(12,3), len_on_begin numeric(12,3), len_arrival numeric(12,3), 
		len_produced numeric(12,3), len_shipped numeric(12,3), len_on_end numeric(12,3),
        len_inv_add numeric(12,3), len_inv_del numeric(12,3));


и
Код: sql
1.
2.
3.
4.
5.
6.
7.
	select r0.op_code,r0.op_id,
        max((select max(px.prod_group) from prod px where px.op_ingr=r0.op_id)) prod_group,
        sum(isnull((select sum(isnull(px.weight_fact,px.weight_calc)) from prod px where px.op_prod=r0.op_id),0)) -
            sum(isnull((select sum(isnull(px.weight_fact,px.weight_calc)) from prod px where px.op_ingr=r0.op_id),0)) weight
    into #tmp_weight_buffer from oper r0 
	where r0.op_date between @date_st and @date_fn and r0.op_code in ('SCALE','STORE_MOVE','MPC_PACK')
    group by r0.op_code,r0.op_id order by r0.op_code;



при этом, первая таблица удаляется, а вторая - нет. Каким образом это можно оптимизировать?
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331689
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Soo,

Что Вам мешает оптимизировать в ASA процедуру, которая выполняется 117 сек? Для этого не нужен РНР.
Про временные таблицы почитайте документацию.
Кто мешает попробовать написать
create table #t1 вместо select .... into #t1 Если надо drop table t1 И т.п.
Еще подозреваю, что в таком select дело именно в быстродействии выборки, а не временной таблицы.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331704
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Soo,

А что, ASA 9 так хорош, что лучше не переносить на PHP?
Что касается обработки данных в таблицах, которые уже находятся той же базе данных, то это даже сравнивать неприлично. Это как шуруповерт и отвертка. РНР для другого предназначен, у него другие сильные стороны.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39331895
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SooСтоит ASA 9.0.2.3951. В настройках стоит Transact-SQLВ каких таких настройках???
ASA автоматически распознает и исполняет команды на двух диалектах. С единственным ограничением что внутри одной хранимой процедуры не должно быть смешений диалектов. Но иметь две процедуры на разных диалектах никто не запрещает.

SooМне дали разбирать АСУП, написанную до 2010 года, так как она начала жёстко лагать. Я думаю, что из-за процедур обработки данных, которые зачем-то сделаны в 32-разрядной версии ASA, а не в языках, которые больше для этого предназначены (здесь используется PHP).Зря так думаешь. Если лагает именно СУБД, то смотри размер свободного места под свап, под логи. Памятью управлять полезно.
Ну и конечно надо смотреть на индексы их нужность и/или недостаточность.
Ни разрядность движка СУБД, ни диалект на котором написаны хранимые процедуры на скорость обработки не влияют никак.


SooУ меня на компе 4 гига оперативы. ASA в момент съедает 1 гиг и начинает лагать - очевидно, что оперативы ей не хватает. Отсюда вывод проблемы в разрядности. Возможно, в будущем мне удастся увеличить у себя на тачке память, тогда и буду пробовать расширять возможности ASA.Это не совсем верный вывод. Да, при наличии всего одного гига памяти СУБД делает больше запросов к диску чем при наличии четырех гигов.
Ну а если у тебя Винда на 4-х гигах (уверен в этом?) то можно запустить СУБД в AWE режиме и она будет брать столько памяти сколько Винда отдаст. Читай документацию про ключ -cw там есть все инструкции. Ну или действительно бери 64-х битную версию поновее чем девятка, там с пожиранием памяти все намного проще.

SooПереписывать всё подряд я не собираюсь, только то, что лагает. Согласитесь, когда процедура выполняется 117 сек - это не очень быстро. Притом, что она делает не так уж и много.117 секунд это мелочи :) Конечно надо стремиться к миллисекундам, но две минуты это не несколько суток...
Смотри на индексы в первую очередь. Запусти процедуру через .... не помню как он называется. Поищи в Sybase Central'е у девятой ASA есть профайлер и утилита делающая подсказки по индексам.

SooТеперь про мусор. Временные таблицы создаются таким образом:
....
при этом, первая таблица удаляется, а вторая - нет. Каким образом это можно оптимизировать?Это ты от необразованности говоришь глупости. Эти два варианта ничем друг от друга по времени жизни таблиц не отличаются вообще и в обоих случаях могут как быть уничтожены вручную через drop table, так и убьются автоматически по окончанию хранимой процедуры. Мусора никакого не остается.
Впрочем, надо учитывать что пихая данные во временную таблицу можно эту таблицу раздуть до неприличных размеров и она сожрет все место на диске (посредством свопа конечно). В общем, времянками тоже надо уметь пользоваться.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332237
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SooТеперь про мусор. Временные таблицы создаются таким образом:
[при этом, первая таблица удаляется, а вторая - нет. Каким образом это можно оптимизировать?
Времянки бывают сессионные, т. е. существуют только внутри сессии, окончилась сессия они и убились, а есть и глобальные, убиваются на перезагрузки, дальше сами разберетесь...
Теперь по поводу процедуры на 117 секунд, там надо смотреть очень внимательно, обычно выборка там не использует индексы, или нужных нет, и по каждому чижу сканирует всю таблицу(таблицы), причем иногда используются функции, которые тоже приводят к скану всей таблицы(таблиц)
Н у на конец у вас там такие конструкции
Код: sql
1.
     select sum(isnull(px.weight_fact,px.weight_calc)) from prod px where px.op_prod=r0.op_id


isnull все-таки логическая функция, такие веши лучше переписать через left join.
З.Ы. Все-таки создатель был ораклоид, там очень хороший оптимизатор, плохой запрос/оптимизированный запрос - время исполнения практически одинаково...
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332509
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
White Owl,

Спасибо за подсказку про своп, я перераспределил память и запрос стал выполняться за 3,5 сек.

Sergey Orlov,
Спасибо за подсказки, я обязательно разберусь с индексами. ASA мне выводит постоянно ошибки типа:
Код: sql
1.
Дублирование индекса * для таблицы * в базе данных *


или
Код: sql
1.
Нет уникального индекса или первичного ключа для таблицы * в базе данных *
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332525
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
Ещё хотел спросить, если обновить ASA до последней версии, не возникнет проблем совместимости? Например, если PHP обновлять до новых версий, некоторые функции заменяются новыми, некоторые удаляются или модифицируются, в результате чего приходится вносить изменения в код. Такого здесь не возникнет?
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332581
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.10.2016 9:28, Soo пишет:

> Спасибо за подсказки, я обязательно разберусь с индексами. ASA мне
> выводит постоянно ошибки типа:
>
> Дублирование индекса * для таблицы * в базе данных *
>
> или
>
> Нет уникального индекса или первичного ключа для таблицы * в базе данных *

Это не ошибки. Это предупреждения о том, что у разработчика структуры БД
руки из того же места, что и ноги .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332590
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
24.10.2016 9:43, Soo пишет:

> Ещё хотел спросить, если обновить ASA до последней версии, не возникнет
> проблем совместимости?

Нужно обязательно всё тестировать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332622
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
Sergey OrlovSoo,
Вы несколько противоречите себе, а вообще, судя по всему человек, создававший базу хорошо знал оракл, отсюда и растут ноги использования t-sql, а не нативного диалекта watcom sql, а аса выбран был за малое потребление этим движком ресурсов. Теперь по поводу процедур обработки, не думаю, что перенос чего-то в php как-то превысит в скорости sql-диалект аса, и тот и другой движок - интерпретаторы, да и временные таблицы в базе в своем большинстве, я думаю, используются от не знания возможностей аса. Вообщем все в ваших руках, с учетом того, что вам ее надлежит поддерживать длительное время, начните с изучения аса, создания бекапов его баз, кстати, когда делали последний раз бекап и как его делали, размер лога сейчас какой?
теперь по поводу лагает, это абсалютно не из-за 32-разрядной версии аса, вполне возможно процедуры не убирают за собой мусор, может еще что-то...

Насколько я знаю, бекапы делаются каждый день. Я мучаю один из таких бекапов. Размер лога у него 73 Мб.
На боевой версии я сейчас посмотрел лог весит 480 Мб. Разница по времени у этих дампов примерно 8 месяцев.
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332733
Soo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Soo
Гость
SQL Anywhere 16 и 17 не хотят работать с моей базой((
говорят, что я должен rebuild базу. Кто-нибудь знает, как это делается?
...
Рейтинг: 0 / 0
Процедура t-sql
    #39332773
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SooНасколько я знаю, бекапы делаются каждый день. Я мучаю один из таких бекапов. Размер лога у него 73 Мб.
На боевой версии я сейчас посмотрел лог весит 480 Мб. Разница по времени у этих дампов примерно 8 месяцев.
А сама база сколько весит?
SooSQL Anywhere 16 и 17 не хотят работать с моей базой((
говорят, что я должен rebuild базу. Кто-нибудь знает, как это делается?

Все правильно, так и должно быть... В составе аса есть утилита rebuild, для каждой версии своя, общий синтаксис rebuild old-database new-database [ DBA-password ]
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Процедура t-sql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]