SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0003101 | SAS.Планета | [All Projects] Баг | public | 05-07-2016 17:38 | 02-08-2016 10:03 |
|
Reporter | gma | |
Assigned To | zed | |
Priority | normal | Severity | major | Reproducibility | have not tried |
Status | resolved | Resolution | fixed | |
Platform | Windows | OS | 7 | OS Version | Enterprise |
Product Version | 160707 | |
Target Version | 181221 | Fixed in Version | 181221 | |
|
Summary | 0003101: Отказ в конвертации кэша в SQLite из-за проблем с памятью |
Description | Оперативки в машине 32Гб. Была запущена конвертация кэша из GMT в SQlite. Кэш "весит" немногим больше 130Гб, на диске есть место. NTFS. В некий момент конвертация остановилась, в логе пошли ошибки, появилась надпись про невозможность работы, точно не помню. Перезапустил процесс заново, появилась приложенная картинка. Лог размером 1,3Гб -- весь не покажу, но вот несколько крайних записей:
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) 3 . 1 3 . 0 a t E : \ S A S P l a n e t \ s q l i t e 3 . d l l
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) o u t o f m e m o r y ( e r r o r c o d e : 7 )
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) 3 . 1 3 . 0 a t E : \ S A S P l a n e t \ s q l i t e 3 . d l l
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) o u t o f m e m o r y ( e r r o r c o d e : 7 )
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) 3 . 1 3 . 0 a t E : \ S A S P l a n e t \ s q l i t e 3 . d l l
2 0 1 6 - 0 7 - 0 5 1 5 : 0 2 : 2 9 . 7 3 1 ( i n i t ) o u t o f m e m o r y ( e r r o r c o d e : 7 )
|
Steps To Reproduce | |
Additional Information | |
Tags | SQLite |
Relationships | has duplicate | 0003113 | closed | vdemidov | Во время конвертации кеша "Can't alocate the DIB handle." |
|
Attached Files | outof.png (27,802) 05-07-2016 17:38 https://bugtracker.sasgis.org/file_download.php?file_id=2087&type=bug
cant.png (17,526) 06-07-2016 06:23 https://bugtracker.sasgis.org/file_download.php?file_id=2088&type=bug
sqlite.zip (223,508) 06-07-2016 11:01 https://bugtracker.sasgis.org/file_download.php?file_id=2089&type=bug files.zip (1,375) 06-07-2016 11:24 https://bugtracker.sasgis.org/file_download.php?file_id=2090&type=bug SASPlanet.Debug.zip (7,307) 06-07-2016 17:09 https://bugtracker.sasgis.org/file_download.php?file_id=2091&type=bug sqlite2.rar (1,616,026) 06-07-2016 17:09 https://bugtracker.sasgis.org/file_download.php?file_id=2092&type=bug outom.png (19,078) 08-07-2016 05:42 https://bugtracker.sasgis.org/file_download.php?file_id=2093&type=bug
bd.png (18,440) 12-07-2016 18:07 https://bugtracker.sasgis.org/file_download.php?file_id=2096&type=bug
|
|
Issue History |
Date Modified | Username | Field | Change |
05-07-2016 17:38 | gma | New Issue | |
05-07-2016 17:38 | gma | File Added: outof.png | |
06-07-2016 06:23 | gma | File Added: cant.png | |
06-07-2016 06:24 | gma | Note Added: 0017495 | |
06-07-2016 06:25 | gma | Tag Attached: SQLite | |
06-07-2016 07:41 | zed | Note Added: 0017496 | |
06-07-2016 07:59 | vdemidov | Status | new => feedback |
06-07-2016 11:01 | gma | File Added: sqlite.zip | |
06-07-2016 11:07 | vdemidov | Status | feedback => new |
06-07-2016 11:23 | gma | Note Added: 0017503 | |
06-07-2016 11:24 | gma | File Added: files.zip | |
06-07-2016 17:07 | gma | Note Added: 0017504 | |
06-07-2016 17:09 | gma | File Added: SASPlanet.Debug.zip | |
06-07-2016 17:09 | gma | File Added: sqlite2.rar | |
06-07-2016 17:11 | gma | Note Edited: 0017504 | bug_revision_view_page.php?bugnote_id=17504#r7026 |
08-07-2016 05:41 | gma | Note Added: 0017505 | |
08-07-2016 05:42 | gma | File Added: outom.png | |
09-07-2016 09:28 | zed | Summary | отказ в конвертации кэша в sqlite из-за проблем с памятью => Отказ в конвертации кэша в SQLite из-за проблем с памятью |
09-07-2016 09:28 | zed | Status | new => confirmed |
09-07-2016 09:28 | zed | Target Version | => 181221 |
09-07-2016 09:30 | zed | Note Added: 0017506 | |
12-07-2016 18:06 | gma | Note Added: 0017509 | |
12-07-2016 18:07 | gma | File Added: bd.png | |
13-07-2016 03:23 | zed | Note Added: 0017510 | |
13-07-2016 06:10 | gma | Note Added: 0017514 | |
13-07-2016 06:22 | vdemidov | Note Added: 0017515 | |
13-07-2016 06:22 | zed | Note Added: 0017516 | |
21-07-2016 16:19 | aflexus | Note Added: 0017537 | |
21-07-2016 16:53 | aflexus | Note Edited: 0017537 | bug_revision_view_page.php?bugnote_id=17537#r7034 |
21-07-2016 17:33 | vdemidov | Relationship added | has duplicate 0003113 |
22-07-2016 13:15 | zed | Note Added: 0017553 | |
27-07-2016 21:46 | aflexus | Note Added: 0017562 | |
27-07-2016 21:48 | aflexus | Note Edited: 0017562 | bug_revision_view_page.php?bugnote_id=17562#r7044 |
28-07-2016 05:25 | zed | Note Added: 0017563 | |
01-08-2016 13:16 | zed | Note Added: 0017577 | |
01-08-2016 13:21 | zed | Assigned To | => zed |
01-08-2016 13:21 | zed | Status | confirmed => feedback |
01-08-2016 13:37 | zed | Note Added: 0017578 | |
02-08-2016 06:06 | gma | Note Added: 0017581 | |
02-08-2016 06:06 | gma | Status | feedback => assigned |
02-08-2016 09:09 | zed | Status | assigned => resolved |
02-08-2016 09:09 | zed | Fixed in Version | => 181221 |
02-08-2016 09:09 | zed | Resolution | open => fixed |
02-08-2016 10:03 | vdemidov | Product Version | .Nightly => 160707 |
Notes |
|
(0017495)
|
gma
|
06-07-2016 06:24
|
|
> надпись про невозможность работы -- cant.png |
|
|
(0017496)
|
zed
|
06-07-2016 07:41
|
|
Попробуйте заархивировать лог, и если он получится не очень большой, прислать его мне. Возможно, там будет что-то интересное. Затем, удалите его и запустите дебажную версию.
В SQLite кэше что-то успело создаться? Сколько файлов там и какого размера? Файлы только с раcширением *.sqlitedb или есть и другие (и много ли их, если есть)? |
|
|
(0017503)
|
gma
|
06-07-2016 11:23
|
|
> Попробуйте заархивировать лог -- sqlite.zip. Это следующий лог. первый потёрся самой программой, когда я запустил повторную конвертацию. Стабильно доходит до 15 уровня и затыкается. Внутри зипа есть кусочек старого лога (err10-07.txt) в месте перехода от ошибка10 к ошибка07. До этого с двух часов ночи была ошибка10. Переключение между номерами ошибок произошло после нажатия на Ок в окне "can't". Больше ничего интересного там не было.
> В SQLite кэше что-то успело создаться? -- да создались папки:
z2\
z11\
z12\
z13\
z14\
z15\
внутри созданы файлы трёх видов (files.txt). Все файлы *.sqlitedb-wal пустые (0), Все *.sqlitedb-shm равны 32кб и забиты нулями. |
|
|
(0017504)
|
gma
|
06-07-2016 17:07
(edited on: 06-07-2016 17:11) |
|
Запустил дебажку. она поработала пару часов и точно так же отвалилась. Выключал через диспетчер. Одновременно работал GM и памяти оставалось около 8 Гб. Соотв. отвалилась раньше.
|
|
|
(0017505)
|
gma
|
08-07-2016 05:41
|
|
Попробовал на свежей "стабильной" (с) версии 160707 запустить этот процесс через "Операции--скопировать". Получилось то же самое (outom.png) Логи этого процесса не создавались. |
|
|
(0017506)
|
zed
|
09-07-2016 09:30
|
|
Проблема в том, что не контролируется количество соединений с БД и они, открываясь, никогда не закрываются. Нужно переделывать механизм открытия соединений и делать ограниченный по размерам пул. |
|
|
(0017509)
|
gma
|
12-07-2016 18:06
|
|
Могу создать новый инцидент, но мне кажется, они как-то связаны "bd.png" |
|
|
(0017510)
|
zed
|
13-07-2016 03:23
|
|
Очевидно, если SQLite кэш выжрал всю доступную память, то ни Беркли ни всё остальное не сможет нормально работать, поэтому, да, эти ошибки связаны. |
|
|
(0017514)
|
gma
|
13-07-2016 06:10
|
|
Вся! память не выжирается. Съедается всего 3,5Гб т.к. прога 32-битная, и на этом всё кончается. Но конвертация в беркли была запущена на вновь открытой программе и вроде бы не должна быть напрямую связана с предыдущей ошибкой. Я предполагаю связь внутреннюю -- в алгоритмах конвертации или в отношениях с памятью... |
|
|
|
> Вся! память не выжирается. Съедается всего 3,5Гб
Ого, а вы в курсе, что 32-битной проге, без дополнительных ухищрений доступно только 2 Гб, а с некоторыми костылями 3 Гб на 32-битной винде и 4 ГБ на 64-битной. Более того, даже наличие свободной памяти не гарантирует что нужное количество памяти можно выделить. Память может быть сильно фрагментирована. |
|
|
(0017516)
|
zed
|
13-07-2016 06:22
|
|
Сообщение об ошибке даёт ясно понять, что процессу не хватает памяти. Что вы пытались сделать с кэшем Беркли? И как к этому был причастен кэш SQLite?
Рекомендую дождаться когда этот баг в SQLite будет исправлен и тестировать уже потом. |
|
|
(0017537)
|
aflexus
|
21-07-2016 16:19
(edited on: 21-07-2016 16:53) |
|
> Проблема в том, что не контролируется количество соединений с БД и они, открываясь, никогда не закрываются. Нужно переделывать механизм открытия соединений и делать ограниченный по размерам пул.
А в беркли закрываются?
Кстати, скорость конвертации из обычного кеша в sqlite просто ракета, если сравнивать с berkley. Неужели последний настолько медленный?
|
|
|
(0017553)
|
zed
|
22-07-2016 13:15
|
|
> А в беркли закрываются?
Да, закрываются и ограничены 32-мя штуками (можно изменять через конфиг).
> Неужели последний настолько медленный?
Его пришлось сильно затормозить, т.к. были проблемы с повреждением БД. Возможно страдает моя реализация, а возможно ещё что. Если есть мысли, как можно сделать кэш быстрее (не повредив его устойчивости), высказывайте свои мысли, буду рад обсудить. |
|
|
(0017562)
|
aflexus
|
27-07-2016 21:46
(edited on: 27-07-2016 21:48) |
|
Средняя скорость конвертации sas->bdb 20 тайлов в секунду... Что-то явно не так ибо совсем не стыкуется с описанием bdb:
"BerkeleyDB can be extremely fast - I recently designed a built a data analysis platform for an employer that was capable of doing 40k inserts per second on an 8 core x86 system (while at the same time doing thousands of reads per second) with a dataset in the 30G range. This was with full transactional protection" - http://stackoverflow.com/questions/2824135/how-fast-is-berkeley-db-sql-compared-to-sqlite
http://www.oracle.com/technetwork/products/berkeleydb/berkeley-db-perf-128909.pdf
http://highscalability.com/blog/2012/11/29/performance-data-for-leveldb-berkley-db-and-bangdb-for-rando.html
А где можно код посмотреть? Я, конечно, навряд ли чем буду полезен, но мало ли .
|
|
|
(0017563)
|
zed
|
28-07-2016 05:25
|
|
|
|
(0017577)
|
zed
|
01-08-2016 13:16
|
|
Я ошибся, соединения всё таки закрываются. Но вот количество открытых никак не контролируется и до того, как сработает очистка мусора (раз в 3 минуты), можно успеть открыть очень много соединений.
Но это цветочки, а вот ягодки: задан очень большой размер кэша в памяти (60 000 страниц) для одного файла БД. Учитывая, что размер одной страницы обычно равен 4 кБ, то SQLite разрешено кэшировать в памяти 4 * 60000 = 240 Мб (!) на один файл. Т.е. чтобы выжрать всю память, достаточно активно писать в 5-6 файлов БД.
По-умолчанию, в SQLite кэшируется 2000 страниц (8 Мб на файл), протестируйте с этим значением. Для этого, закройте SAS и в папке с кэшем для карты, в которую идёт запись (например, /cache_sqlite/sat/), создайте текстовый файл s.sql вот с таким содержимым:
PRAGMA encoding="UTF-8"
PRAGMA cache_size=2000
PRAGMA main.journal_mode=WAL
PRAGMA synchronous=NORMAL
И попробуйте запустить конвертер кэша, а потом отпишитесь сюда.
В ночнушке же, я, пожалуй, уменьшу время сборки мусора до 1 минуты и размер кэша до 2000. |
|
|
(0017578)
|
zed
|
01-08-2016 13:37
|
|
На всякий случай:
- Значение cache_size, при желании, можно уменьшать вплоть до 10 страниц
- для увеличения быстродействия конвертирования кэша, можно отключить синхронизацию (synchronous=OFF) |
|
|
(0017581)
|
gma
|
02-08-2016 06:06
|
|
Полсуток -- полёт нормальный. |
|