Microinvest Форум Форуми Microinvest Форум
Microinvest Форум
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ПотребителиПотребители   Потребителски групиПотребителски групи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Пропаднали продажби в Microinvest Склад Pro Light
Иди на страница Предишна  1, 2
 
Създайте нова тема   Напишете отговор    Microinvest Форум Форуми -> Склад Pro
Предишната тема :: Следващата тема  
Автор Съобщение
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Пон Фев 08, 2016 13:42    Заглавие: Отговорете с цитат

С нов сървър в data center резултатите са същите:

User OS Version: Windows 7
Build version: 3.07.052 (build 04.07.2014)
Date & Time: 29.12.2015 'г.' 16:45:52
Error code: -2147467259
Error message: Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Method Name: Database.ExecuteScalar('SELECT SUM(Qtty*Mode) as [sum] FROM payments WHERE PartnerID > 0 AND OperType = 36 AND PartnerID = 3')
Type System error
--------------------------------------------------------------------

=>
Продажбата пропада, плащането и задължението минават. Пуска се нов документ за същата продажба
=>
продажбата и задължението минават
=>
разминават се таблицата с операциите и тази с плащанията.
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Виктор Павлов
Microinvest
Microinvest


Регистриран на: 12 Авг 2002
Мнения: 20141

МнениеПуснато на: Пон Фев 08, 2016 22:43    Заглавие: Отговорете с цитат

Направете поправка на базата, SQL сървърът нещо не успява да се справи със задачата.
_________________
Клиентите на Microinvest по света: http://www.microinside.ru
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Вто Фев 09, 2016 16:30    Заглавие: Отговорете с цитат

Check-ове на базата са пускани многобройни. Репликацията е преналивана в събскрайбарите и т.н.

Това е трасирането при една частично пропаднала продажба.
След insert-a на 3-ти ред трябва да има още 2 insert-a в Operations(2 стоки ги няма).
В таблицата Payments влизат 33.27лв. задължение и плащане, а продажбата е за 0-ла лв. (В случая бонус продукт).

IF @@TRANCOUNT > 0 COMMIT TRAN
go
INSERT INTO operations (OperType, Acct, GoodID, PartnerID, ObjectID, OperatorID, Qtty, Sign, PriceIn, PriceOut, VATIn , VATOut, Discount, CurrencyID, CurrencyRate, [Date], Lot, LotID, [Note], SrcDocID, UserID, UserRealTime) VALUES (2, 60105580, 1245113, 3, 7, 90, 1, -1, 1.1, 0, 0.183333333333333, 0, 0, 1,1,'2016-02-09', '001050216', 239364293, ' ', 0, 90, GETDATE())
go
set implicit_transactions off
go
UPDATE store SET Qtty = Qtty - 1 WHERE ObjectID = 7 AND GoodID = 1245113 AND ABS(Qtty - 50)<0.0000001 AND Lot='001050216' AND LotID=239364293 AND ABS(Price - 1.1)<0.0000001
go
SELECT goods.ID, goods.Code, goods.Name, goods.Name2, goods.Description, goods.PriceOut1, goods.PriceOut2, goods.PriceOut3, goods.PriceOut4, goods.PriceOut5, goods.PriceOut6, goods.PriceOut7, goods.PriceOut8, goods.PriceOut9, goods.PriceOut10, goods.Type, partners.PriceGroup, operations.Discount, operations.OperType, operations.VatOut, vatgroups.Code AS VATCode, vatgroups.Name as VATName, vatgroups.VATValue, ' ' AS GroupName, -1 AS GroupID, ' ' as GroupCode, SUM(operations.Qtty) AS Quantity, operations.VATOut, operations.PriceOut AS Price FROM ((operations LEFT JOIN goods ON operations.GoodID = goods.ID) LEFT JOIN vatgroups ON vatgroups.ID = goods.TaxGroup) LEFT JOIN partners ON partners.ID = operations.PartnerID WHERE operations.OperType = 2 AND operations.Acct = 180032340 GROUP BY goods.ID, goods.Code, goods.Name, goods.Name2, goods.Description, vatgroups.code, vatgroups.Name, vatgroups.VATValue, operations.PriceOut, operations.Discount, operations.OperType, operations.VatOut, goods.PriceOut1, goods.PriceOut2, goods.PriceOut3, goods.PriceOut4, goods.PriceOut5, goods.PriceOut6, goods.PriceOut7, goods.PriceOut8, goods.PriceOut9, goods.PriceOut10, goods.Type, partners.PriceGroup ORDER BY MIN(operations.ID)
go
DELETE FROM store WHERE Qtty = 0
go
SELECT [Value] FROM configuration WHERE [Key]='configkey49' AND UserId=62 ORDER BY ID DESC
go
SELECT Address, BankAcct, BankCode, BankName, BankVATAcct, Bulstat, City, Code, Company, eMail, Fax, ID, IsDefault, MOL, Phone, TaxNo, Note1, Note2 FROM registration
go
SELECT usersgroups.Name FROM usersgroups WHERE ID = 1
go
SELECT objectsgroups.Name FROM objectsgroups WHERE ID = 18
go
SELECT objectsgroups.Name FROM objectsgroups WHERE ID = 1
go
Select SrcDocID FROM operations WHERE OperType = 2 AND Acct = 180032340
go
INSERT INTO payments (Acct, OperType, PartnerID, ObjectID, Qtty, Mode, Type, UserID, [Date], EndDate, UserRealTime, TransactionNumber, Sign) VALUES (60105580, 2, 3, 7, 33.27, -1, 1,90, '2016-02-09','2016-02-09', GETDATE(), 'Сума в брой', 1)
go
Select * from Configuration where UserID = 1318041 AND [Key] = 'configkey66'
go
SELECT MIN(partnerID) FROM operations WHERE OperType = 2 AND Acct = 180032340 GROUP BY partnerID
go
SELECT SUM(Qtty*Mode) FROM payments WHERE partnerId = 1286369 AND opertype=36
go
INSERT INTO payments (Acct, OperType, PartnerID, ObjectID, Qtty, Mode, Type, UserID, [Date], EndDate, UserRealTime, TransactionNumber, Sign) VALUES (60105580, 2, 3, 7, 33.27, 1, 1,90, '2016-02-09','2016-02-09', GETDATE(), 'Сума в брой', 1)
go
INSERT INTO cashbook ([Date], [Desc], OperType, Sign, Profit, ObjectID, UserID, UserrealTime) VALUES ('2016-02-09', 'Продажба № 0060105580 ', 8, 1, 33.27, 7, 90, GETDATE())
go
Select * from Configuration where UserID = 47 AND [Key] = 'configkey66'
go
Select * from Configuration where UserID = 86 AND [Key] = 'configkey66'
go
IF @@TRANCOUNT > 0 COMMIT TRAN
go


Ако има конфиденциална информация, изтрийте поста и да продължим на лични.
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Чет Фев 11, 2016 09:43    Заглавие: Отговорете с цитат

В момента се осъществяват около 10 некоректни продажби на ден.
Ще окажете ли някакво съдействие?
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Виктор Павлов
Microinvest
Microinvest


Регистриран на: 12 Авг 2002
Мнения: 20141

МнениеПуснато на: Чет Фев 11, 2016 12:50    Заглавие: Отговорете с цитат

Това е проблем на SQL сървъра, тук Microinvest няма много общо. Там трябва да се търси проблема.

Също така обърнете внимание на това, че SQL-а, който дава проблеми не съществува в транзакционния пакет, който сте публикували (вероятно извадка от нашата програма).
_________________
Клиентите на Microinvest по света: http://www.microinside.ru
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Чет Фев 11, 2016 13:35    Заглавие: Отговорете с цитат

Виктор Павлов написа:
обърнете внимание на това, че SQL-а, който дава проблеми не съществува в транзакционния пакет


Как е възможно да няма транзакция при продажба. Това е не само лоша практика, а е абсурдна програмна грешка(може би допусната отново с цел бързодействие, за да държи таблиците отключени по време на продажбата). Транзакцията има нива на заключване. Далеч от бази данни на този който го е сътворил! Защо е изпълнено така? Истина ли е това? Проверено ли е?

Ако е така как твърдите:

Виктор Павлов написа:
Microinvest няма много общо


?!

Лога който изпратих е от заявки изцяло от Microinvest Склад Pro Light.
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Виктор Павлов
Microinvest
Microinvest


Регистриран на: 12 Авг 2002
Мнения: 20141

МнениеПуснато на: Чет Фев 11, 2016 15:18    Заглавие: Отговорете с цитат

Защо твърдите, че не е транзакционно?
И точно в този log се вижда, че всичко е в 1 транзакция.
_________________
Клиентите на Microinvest по света: http://www.microinside.ru
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Чет Фев 11, 2016 15:49    Заглавие: Отговорете с цитат

Виктор Павлов написа:
Също така обърнете внимание на това, че SQL-а, който дава проблеми не съществува в транзакционния пакет, който сте публикували (вероятно извадка от нашата програма).

От тук изхождам?
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Виктор Павлов
Microinvest
Microinvest


Регистриран на: 12 Авг 2002
Мнения: 20141

МнениеПуснато на: Чет Фев 11, 2016 16:35    Заглавие: Отговорете с цитат

Да направим логическа разшифровка:
Цитат:
Transaction (Process ID 52) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Method Name: Database.ExecuteScalar('SELECT SUM(Qtty*Mode) as [sum] FROM payments WHERE PartnerID > 0 AND OperType = 36 AND PartnerID = 3')

1. Транзакцията от процес 52 се е засекла с друга транзакция отдруг процес и е избрана да бъде убита.
2. Това означава, че вървят 2 транзакции едновременно и SQL сървърът не успява на обработи едната.

Изводи:
1. Всичко работи транзакционно;
2. SQL сървърът не успява да се справи. Принципно самото определение ACID означава, че един SQL сървър не трябва да изпада в такова състояние.

Пуснете трасировщик, който да прихване двата процеса и да се разбере защо транзакция SELECT не успява, при положение, че няма промяна на данните. Това е още по-странно и прилича на изключително претоварен сървър.
_________________
Клиентите на Microinvest по света: http://www.microinside.ru
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
ivanp



Регистриран на: 20 Сеп 2012
Мнения: 86

МнениеПуснато на: Чет Фев 11, 2016 20:36    Заглавие: Отговорете с цитат

Проблема не е deadlock-a.
Проблема не е претоварването.

Проблема е че някои от insert-тите в Operations пропадат.

Как е възможно това в транзакция написана по best practice:
using(SqlTransaction)
{
try
{
Продажба();
Плащане();
....
commit;
}
catch
{
rollback;
}
}
_________________
IT
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Виктор Павлов
Microinvest
Microinvest


Регистриран на: 12 Авг 2002
Мнения: 20141

МнениеПуснато на: Съб Фев 13, 2016 17:38    Заглавие: Отговорете с цитат

Цитат:
Как е възможно това в транзакция написана по best practice:

Въпросът трябва да се отнесе към създателите на MS SQL Server.
Ние използваме точно указания от вас алгоритъм.
_________________
Клиентите на Microinvest по света: http://www.microinside.ru
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Покажи мнения от преди:   
Създайте нова тема   Напишете отговор    Microinvest Форум Форуми -> Склад Pro All times are EET (Източна Европа)
Иди на страница Предишна  1, 2
Страница 2 от 2

 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети


Powered by phpBB © 2001, 2005 phpBB Group
Translation by: Boby Dimitrov