|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
Добрый день уважаемые форумчане, есть следующая таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
[/SRC] По сути в эту таблицу пишется обобщенная статистика по суммам, которые прошли в точке (PointID) за конкретный календарный день (ReportDate) Есть процедура, которая инкрементирует значения в строке (ниже скрипт кот выполняет update): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Проблема возникает в следующем: когда к одной записе (строке) происходит частое обращение на обновление данных (порядка 4 в сек и выше), начинает "плыть" значение в столбце Fee, появляются какие то значение в 6-9й степени после запятой (например 15,50000002 или 15,4999997 при необходимом 15,50), остальные данные в строке не "плывут". При этом, в нормальной ситуации, когда запросов не превышает 1-2 tps, все ровно.... Может был у кого такой же печальный опыт и есть мысли насчет решения такой проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 11:11 |
|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
Developer.Net 1. в столбце Fee, появляются какие то значение в 6-9й степени после запятой (например 15,50000002 или 15,4999997 при необходимом 15,50), остальные данные в строке не "плывут". 2. При этом, в нормальной ситуации, когда запросов не превышает 1-2 tps, все ровно.... 1. Это норма. (С) Малышева Float хранит конечно-разрядное двоичное представление числа. В этом представлении 15,5 записать невозможно. Разрядов не хватает. Хранится "ближайшее". Усугубляется математическими операциями. 2. Это сказки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 11:19 |
|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
Developer.Net Может был у кого такой же печальный опыт и есть мысли насчет решения такой проблемы? Я думаю тут частота обновлений никакого отношения к делу не имеет. Если бы у вас запрос вставал на блокировках -- это другое дело. Могу предложить взять не float, а bigint и хранить в нем сумму умноженную на 10000 или 100 (сдвинув запятую на 4 знака, или на 2 знака.) Тогда должно быть норм. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 12:14 |
|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
aleks222, спасибо за подсказку, перечитал MSDN)) нужно переходить на decimal https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187912(v=sql.105)?redirectedfrom=MSDN ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2020, 12:36 |
|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
Developer.Net aleks222, спасибо за подсказку, перечитал MSDN)) нужно переходить на decimal https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms187912(v=sql.105)?redirectedfrom=MSDN или MONEY ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 12:49 |
|
Нагруженный update строки
|
|||
---|---|---|---|
#18+
money - для расчетов не самый лучший тип. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2020, 17:33 |
|
|
start [/forum/topic.php?fid=46&msg=39911118&tid=1686659]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 447ms |
0 / 0 |