Clarion 6.3 MSSQL Вопрос
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Clarion 6.3 MSSQL Вопрос
Здравствуйте.
Судьба свела меня с Кларионом, есть внутренний продукт на 6.3, MSSQL запрос выполнен в формате селекта пары тысяч записей. Наш продукт почему-то делает полный селект, а потом забирает по сети по одной штучке, делая отдельный запрос по пойнтеру на каждую запись из памяти датабазы. Трафик генерирует неописуемый, время отклика уходит в минуты, десятки минут. Вопрос в следующем: это нормально для Клариона или можно как-то сделать чтобы по-людски все записи забрать одной пачкой? Если можно сделать по-человечески, то есть ли пример такого селекта для Клариона?
Судьба свела меня с Кларионом, есть внутренний продукт на 6.3, MSSQL запрос выполнен в формате селекта пары тысяч записей. Наш продукт почему-то делает полный селект, а потом забирает по сети по одной штучке, делая отдельный запрос по пойнтеру на каждую запись из памяти датабазы. Трафик генерирует неописуемый, время отклика уходит в минуты, десятки минут. Вопрос в следующем: это нормально для Клариона или можно как-то сделать чтобы по-людски все записи забрать одной пачкой? Если можно сделать по-человечески, то есть ли пример такого селекта для Клариона?
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1378
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
Clarion 6.3 MSSQL Вопрос
Давайте пример кода, так не совсем понятно, о чем речь. Может стандартный броуз с типом загрузки "файл"?
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4625
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 7 раз
- Поблагодарили: 37 раз
Clarion 6.3 MSSQL Вопрос
Не, стандартный с типом файл засасывает всю таблицу на клиента одним запросом. Это больше похоже на какие-то проблемы в рукописном коде.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 4987
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Clarion 6.3 MSSQL Вопрос
Разработчик "view{'field_label',PROP:Name} = string" не знал. Тут примером кода не обойтись. Знания Клаши чуть поглубже нужны.
We are hard at work… for you.
Clarion 6.3 MSSQL Вопрос
Переговорил с тех диром, он мне подгонит пример который они разбирали до меня. А я его сразу - вам.
Clarion 6.3 MSSQL Вопрос
Софтине уже десяток лет, много ходила по рукам, сменила от трёх до пяти разрабов. Теперешний разработчик разбирается в Кларионе от силы на шестёрочку из десяти, а в SQL не разбирается совсем.
Вотъ:
SQL трейс полон
которые вызываются на каждую линию селекта.
Сэмпл кода - часть небольшой процедуры, которая вызывается для обработки закупщика и длится от 13 до 20 секунд. Этот код больше не используется так как его полностью вынесли в SQL stored procedure, что уменьшило скорость выполнения до приемлимой.
Вотъ:
Код: Выделить всё
PROCESSBUYER PROCEDURE (BUYERID) ! Declare Procedure
LOC:NoBuyerCharges BYTE !
LOC:BaseNumeric CSTRING(21) !
LOC:CHAR STRING(1) !
loc:ChargedWeight LONG !
loc:ChargedWeightResale LONG !
loc:HeadCount LONG !
loc:HeadCountResale LONG !
FilesOpened BYTE(0)
CODE
DO OpenFiles
!<mdc 2010-03-10 Combined these 18 update statements into 1>
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALITEMS = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALSALESTAX = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALADDITIONALCHARGES = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALREFUNDS = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET GRANDTOTAL = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET PAYMENTSMADE = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET AMOUNTOWED = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALHEADCOUNT = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALWEIGHT = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALTICKETS = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET UNPRINTEDTICKETS = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET AVGPRICE = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET AVGWEIGHT = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET RESOLDHEAD = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET RESOLDWEIGHT = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET RESOLDEXTENSION = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET INVOICEHEADCOUNT = 0 WHERE Buyers.BuyerSysID = ' & BUYERID
!Buyers{PROP:SQL} = 'UPDATE Buyers SET PENNUM = <39><39> WHERE Buyers.BuyerSysID = ' & BUYERID
! Step1
Buyers{PROP:SQL} = 'UPDATE Buyers SET TOTALITEMS = 0, TOTALSALESTAX = 0, TOTALADDITIONALCHARGES = 0, ' & |
'TOTALREFUNDS = 0, GRANDTOTAL = 0, PAYMENTSMADE = 0, AMOUNTOWED = 0, TOTALHEADCOUNT = 0, TOTALWEIGHT = 0, ' & |
'TOTALTICKETS = 0, UNPRINTEDTICKETS = 0, AVGPRICE = 0, AVGWEIGHT = 0, RESOLDHEAD = 0, RESOLDWEIGHT = 0, ' & |
'RESOLDEXTENSION = 0, INVOICEHEADCOUNT = 0, PENNUM = <39><39> ' & |
'WHERE Buyers.BuyerSysID = ' & BUYERID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET CowCalfLogic = 0, GroupLogic = 0 WHERE Tickets.BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
!</mdc>
!------------------------------!
! Order Number Numeric !
!------------------------------!
BUY:BuyerSysID = BUYERID
Access:Buyers.Fetch(BUY:BUY_SysID)
CLEAR(LOC:BaseNumeric)
LOOP
LEN# = LEN# + 1
IF LEN# >= (LEN(CLIP(BUY:ORDERNUMBER)) + 1)
IF LOC:BaseNumeric > 0
Buyers{PROP:SQL} = 'UPDATE Buyers SET ORDERNUMBERNUMERIC = ' & LOC:BaseNumeric & |
' WHERE BuyerSysID = ' & BUYERID
END
BREAK
END
LOC:CHAR = SUB(BUY:ORDERNUMBER,LEN#,1)
IF NUMERIC(LOC:CHAR) = 1
LOC:BaseNumeric = LOC:BaseNumeric & LOC:CHAR
END
END
!-----------------------------------------------!
! Set Pen Number - Added 1/16/2007 !
!-----------------------------------------------!
! Step1
Buyers{PROP:SQL} = 'UPDATE Buyers SET PENNUM = (SELECT TOP 1 Pen FROM Tickets WHERE Tickets.BuyerSysID = ' & BUY:BuyerSysID & ') WHERE Buyers.BuyerSysID = ' & BUYERID
!------------------------------------------------!
! Pencil Weight Processing !
!------------------------------------------------!
!<mdc 2010-03-10 Combined these 11 update statements into 1>
!Tickets{PROP:SQL} = 'UPDATE Tickets SET CowCalfLogic = (SELECT CowCalfPair FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType) WHERE Tickets.BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET GroupLogic = (SELECT GroupLogic FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType) WHERE Tickets.BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET ShrinkageFactor = (1 - (SELECT WeightShrinkage FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType) / 100) WHERE Tickets.BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET ShrinkageFactor = 1 WHERE ShrinkageFactor IS NULL AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET ShrinkageFactor = 1 WHERE ShrinkageFactor = 0 AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET ChargedWeight = (TotalWeight * ShrinkageFactor) WHERE BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * ChargedWeight / 100) WHERE PriceType = <39>C<39> AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * NumHead) WHERE CowCalfLogic = 0 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * (NumHead / 2)) WHERE CowCalfLogic = 1 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price) WHERE GroupLogic = 1 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID
!Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = 0 WHERE BuyerSysID = 0 AND BuyerSysID = ' & BUYERID
! step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET ' & |
'CowCalfLogic = (SELECT CowCalfPair FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType), ' & |
'GroupLogic = (SELECT GroupLogic FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType), ' & |
'ShrinkageFactor = (1 - (SELECT WeightShrinkage FROM ItemTypes WHERE ItemTypes.ItemNumber = Tickets.AnimalType) / 100), ' & |
'ChargedWeight = (TotalWeight * ShrinkageFactor) ' & |
'WHERE Tickets.BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET ShrinkageFactor = 1 ' & |
'WHERE ((ShrinkageFactor IS NULL) OR (ShrinkageFactor = 0)) AND BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{prop:SQL} = 'UPDATE Tickets SET ChargedWeight = (TotalWeight * ShrinkageFactor) WHERE Tickets.BuyerSysID = ' & BUYERID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * ChargedWeight / 100) ' & |
'WHERE PriceType = <39>C<39> AND BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * NumHead) ' & |
'WHERE CowCalfLogic = 0 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price * (NumHead / 2)) ' & |
'WHERE CowCalfLogic = 1 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = (Price) ' & |
'WHERE GroupLogic = 1 AND PriceType = <39>H<39> AND BuyerSysID = ' & BUYERID !& ' AND Tickets.AuctionID = ' & glo:AuctionID
! Step1
Tickets{PROP:SQL} = 'UPDATE Tickets SET Extension = 0 WHERE BuyerSysID = 0' !& ' AND Tickets.AuctionID = ' & glo:AuctionID
!AND BuyerSysID = ' & BUYERID
!</mdc>
Код: Выделить всё
exec sp_cursorfetch 18017213,2,1,20
Сэмпл кода - часть небольшой процедуры, которая вызывается для обработки закупщика и длится от 13 до 20 секунд. Этот код больше не используется так как его полностью вынесли в SQL stored procedure, что уменьшило скорость выполнения до приемлимой.
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1378
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 7 раз
- Поблагодарили: 1 раз
- Контактная информация:
-
- ✯ Ветеран ✯
- Сообщения: 4987
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Clarion 6.3 MSSQL Вопрос
Что-то я селектов не увидел в приведённом фрагменте. Только апдейт, который, действительно, можно оптимизировать, в т.ч. за счёт хранимки.
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1703
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Clarion 6.3 MSSQL Вопрос
а меньше update используя case when, чтобы за один проход, использовать нельзя?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Дед Пахом
- Старичок
- Сообщения: 3135
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 10 раз
- Поблагодарили: 28 раз
- Контактная информация:
Clarion 6.3 MSSQL Вопрос
+1000, что-то много UPDATE по одной таблице, запихать всё в хранимку и вызывать один раз.gopstop2007 писал(а): ↑02 Декабрь 2018, 13:18а меньше update используя case when, чтобы за один проход, использовать нельзя?
С уважением, ДП