Ддос атака с хаба

Общение админов хабов и их юзеров.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Сделал тесты с разными режимами запуска + время конвертации CustomLocation.ini

http://www.flickr.com/photos/96019675@N02/12482994033/

WAL немного побеждает. но 6 минут нигде нет :(
- HackFresse давай искать причину почему у тебя так?

Для повторения эксперимента запускать тестовую бетку с такими ключами

FlylinkDC.exe /sqlite_use_memory - используется журнал транзакций в памяти
FlylinkDC.exe /sqlite_use_wal - режим WAL
FlylinkDC.exe - (без ключа) режим = PERSIST
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Дело не в моем старом жестоком диске, и дело вовсе не в одном файле CustomLocations.ini, нет. Проблема на порядок выше.

Я акцентировал внимание на
В залогированных запросах жесть вида

Код: Выделить всё

[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://tulcea-evolution.ro')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://gepard-hub.ru' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://gepard-hub.ru')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://electrohub.no-ip.info:888' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://electrohub.no-ip.info:888')
[2014-02-11 20:18:47] commit;

Код: Выделить всё

[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Джек-Потрошитель',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('MAFIA',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Admin',2544,2)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:30] begin;
[2014-02-11 20:23:30] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Commfort',2541,1)
[2014-02-11 20:23:30] commit;
Открываем мануал http://sqlite.org/speed.html
Test 1: 1000 INSERTs

CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');
... 995 lines omitted
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');
PostgreSQL: 4.373
MySQL: 0.114
SQLite 2.7.6: 13.061
SQLite 2.7.6 (nosync): 0.223
Because it does not have a central server to coordinate access, SQLite must close and reopen the database file, and thus invalidate its cache, for each transaction. In this test, each SQL statement is a separate transaction so the database file must be opened and closed and the cache must be flushed 1000 times. In spite of this, the asynchronous version of SQLite is still nearly as fast as MySQL. Notice how much slower the synchronous version is, however. SQLite calls fsync() after each synchronous transaction to make sure that all data is safely on the disk surface before continuing. For most of the 13 seconds in the synchronous test, SQLite was sitting idle waiting on disk I/O to complete.
Потому что он не имеет центрального сервера для координации доступа, SQLite должен закрыть и снова открыть файл базы данных, и, таким образом недействительным свой ​​кэш, для каждой транзакции. В этом тесте, каждый оператор SQL отдельная сделка так что файл базы данных должен быть открыт и закрыт и кэш должен быть промыт 1000 раз. Несмотря на это, асинхронная версия SQLite еще почти так же быстро, как MySQL. Обратите внимание, насколько медленнее синхронной версии, однако. SQLite называет Fsync () после каждого синхронного сделки, чтобы убедиться, что все данные благополучно на поверхности диска, прежде чем продолжить. Для большинства из 13 секунд в синхронном теста, SQLite сидел простаивает, ожидая на диске ввода / вывода, чтобы закончить.
Что значит "открыть файл, записать изменения, закрыть файл" (одна транзакция)? из официального FAQ, почему insert тормозят
A transaction normally requires two complete rotations of the disk platter, which on a 7200RPM disk drive limits you to about 60 transactions per second.
Два полных оборота диска + позиционирование головки, только чтобы записать одну мелкую порцию информации, повторять долго и упорно. Это если кроме флайлинка никаким процессам в системе жесткий не нужен, иначе будут тормоза и хруст

Что значит "открыть файл, записать изменения, закрыть файл очень много раз" для владельцев супер быстрых SSD? Именно, ускоренную выработку и смерть SSD-диска.

Чуть перефразируя - "флайлинк убивает любой винт, просто на моем это больше заметно". А по поводу
Массовые инсерты я не знаю как сделать - у меня функция не тупо инсертит, она перед этим еще и ищет чтобы там не было
такого значения + естественно возвращается ID записи которую нашла или только что вставила.
Как поменять алгоритм пока не знаю.
Всё довольно элементарно - брать информацию пачкой, вместо 1 строки обрабатывать массив , записывать информацию пачкой. Таблицы держать в памяти, периодически скидывая на диск только "полезную" инфу
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):Всё довольно элементарно - брать информацию пачкой, вместо 1 строки обрабатывать массив , записывать информацию пачкой. Таблицы держать в памяти, периодически скидывая на диск только "полезную" инфу
у меня id-шки генерируются движком sqlite после вставки новой записи (там autoincrement)
после вставки каждой записи мне нужно это ID получить назад.
как? все эти статьи в инете про определенную задачу - массовая заливка готовых данных
у меня перед этим идет преобразование информации...

Давай я сделаю кей отключающий PRAGMA synchronous=FULL - с ней замеришь?
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Но самое странное, что твои тормоза аномальные - у меня на нетбуке (atom 1,5) выполняется вся операция за 2 секунды.

кто-то в еще имеет слабый комп? проведите простой эксперимент?

Делается это так
1. включаете системный лог в настройках
2. закрываете флай
3. открываете блокнотом файл CustomLocations.ini - делаете там незначительно изменение
(например добавляете пустую строку чтобы поменялась метка времени.)
4. запускаете флай снова
5. открываете системный лог флайлинка и находите там строки [Stop ] [CustomLocations.ini]
этот кусок кидаете сюда + конфигурацию вашей системы.
такой тест ничего не даст по очень простой причине - такого числа поштучных insert не будет, только быстрое чтение (а оно быстрое). проблема в записи. надо удалять/чистить базу
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):Потому что он не имеет центрального сервера для координации доступа, SQLite должен закрыть и снова открыть файл базы данных,
Это где такой бред написан?
sqlite всегда держит файлы бд открытыми
отрыл-закрыл это в DC++ клиентах так работает лог-менеджер и сохранялка xml-конфигов

http://www.flickr.com/photos/96019675@N02/12483591883/
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Cобрал версию

http://yadi.sk/d/blzytDnCHnRZV

Запусти с ключем
FlylinkDC.exe /sqlite_synchronous_off

и сделай замер конвертации CustomLocation.ini в чистом каталоге сколько будет?
тоже 6 минут?
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

flylinkdc писал(а): Это где такой бред написан?
sqlite всегда держит файлы бд открытыми
бред этот на официальной странице , https://sqlite.org/speed.html , а именно
Test 1: 1000 INSERTs

CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t1 VALUES(1,13153,'thirteen thousand one hundred fifty three');
INSERT INTO t1 VALUES(2,75560,'seventy five thousand five hundred sixty');
... 995 lines omitted
INSERT INTO t1 VALUES(998,66289,'sixty six thousand two hundred eighty nine');
INSERT INTO t1 VALUES(999,24322,'twenty four thousand three hundred twenty two');
INSERT INTO t1 VALUES(1000,94142,'ninety four thousand one hundred forty two');
PostgreSQL: 4.373
MySQL: 0.114
SQLite 2.7.6: 13.061
SQLite 2.7.6 (nosync): 0.223
Because it does not have a central server to coordinate access, SQLite must close and reopen the database file, and thus invalidate its cache, for each transaction. In this test, each SQL statement is a separate transaction so the database file must be opened and closed and the cache must be flushed 1000 times. In spite of this, the asynchronous version of SQLite is still nearly as fast as MySQL. Notice how much slower the synchronous version is, however. SQLite calls fsync() after each synchronous transaction to make sure that all data is safely on the disk surface before continuing. For most of the 13 seconds in the synchronous test, SQLite was sitting idle waiting on disk I/O to complete.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

В начале страницы https://sqlite.org/speed.html
красным ведь написано "Note: This document is very very old." - возможно так было раньше.

В общем 6 минут в твоем случае очень странная цифра она не связана с древностью винта
проблема в чем-то другом

алгоритм генерации ID-шек при конвертации CustomLocations.ini я переделывать не могу
т.к. зависон в 6 минут появляется только у тебя.

Нужно как минимум повторить эту ситуацию чтобы решить проблему.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Изменения в коде:
http://code.google.com/p/flylinkdc/sour ... il?r=16572#

Собрал еще одну тестовую сборку
http://yadi.sk/d/Mu76jA1OHnfFy

В ней отрыто логирование всех локов и забивает лог Settings\Logs\ddos.log
использовать аккуратно только для теста.
Полный лог с моего компа
http://yadi.sk/d/hIH2LezfHnhZK

Алгоритм на примере одного ключа
1. Если на вход приходит запрос активного поиска вида F?T?0?9?TTH. (с ключем "76.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA")
второй раз за интервал более N-сек (в конфиге прописал 10 сек) то флай его не скидывает в менеджер поиска вообще а просто поднимает счетчик появлений.
2. В потоке таймера каждые 10 +2 сек и удаляем все ключи которые лежат в таблице временной блокировки более 10 сек

Ожидаю таким алгоритмом убрать лавину запросов идущих с разных хабов а также ответную кучу UDP пакетов одному и тому-же клиенту.
что скажете?

Лог с фильтрацией по ключу:

Код: Выделить всё

D:\FlylinkDC++r503-beta\Settings\Logs\ddos-2.log                                                                                                                      65001  Ln          1/9 Col 1    Ch 1
[2014-02-12 23:15:13] ** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 2, Hash map size: 546
[2014-02-12 23:15:13] *** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 3, Hash map size: 555
[2014-02-12 23:15:13] **** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 4, Hash map size: 565
[2014-02-12 23:15:13] ***** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 5, Hash map size: 566
[2014-02-12 23:15:14] ****** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 6, Hash map size: 571
[2014-02-12 23:15:18] ******** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 8, Hash map size: 293
[2014-02-12 23:15:19] ********* BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 9, Hash map size: 324
[2014-02-12 23:15:29] ********* BlockID = 340, Unlock duplicate TTH search: 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count connect = 9, m_tth_duplicate_search.size() = 300

Вырезка из полного лога:

Код: Выделить всё


[2014-02-12 23:15:13] ** BlockID = 350, Lock TTH search = 31.186.136.27:4639 F?T?0?9?TTH:DWWA34U76OMMA5DK2XNCDHLBU56CMBH6K2JVEZQ, Count = 2, Hash map size: 565
[2014-02-12 23:15:13] **** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 4, Hash map size: 565
[2014-02-12 23:15:13] ** BlockID = 351, Lock TTH search = 93.100.147.248:11161 F?T?0?9?TTH:MMAT4KT3PQN4DXZ35ZKVQPKVRUWLQ5T4ZUMEOJI, Count = 2, Hash map size: 565
[2014-02-12 23:15:13] *** BlockID = 342, Lock TTH search = 194.28.5.64:5676 F?T?0?9?TTH:LR7H3HXJJE4ZYHELM2MEZFFH33LPULBQSLLBU2I, Count = 3, Hash map size: 565
[2014-02-12 23:15:13] ** BlockID = 352, Lock TTH search = 87.18.51.2:64145 F?T?0?9?TTH:AHJAE7MNIHDMTVUPL7IOL4J3WP4IYNDGS3JIO6A, Count = 2, Hash map size: 565
[2014-02-12 23:15:13] ***** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 5, Hash map size: 566
[2014-02-12 23:15:13] **** BlockID = 338, Lock TTH search = 37.232.158.45:6441 F?T?0?9?TTH:JAOAACBIWJT7UTIWYIQGMH54FBTSIHG2CYV7ZKQ, Count = 4, Hash map size: 566
[2014-02-12 23:15:13] ** BlockID = 353, Lock TTH search = 94.179.79.126:2890 F?T?0?9?TTH:JPEECRVYDOXMUGRLOKVFTCRKN3O5SVOIKYLH4UA, Count = 2, Hash map size: 569
[2014-02-12 23:15:13] ****** BlockID = 319, Lock TTH search = 128.72.148.147:19300 F?T?0?9?TTH:RYPIYDL7KET7CGLEPPX5ZNHEBRS3RGNWJNOME6I, Count = 6, Hash map size: 569
[2014-02-12 23:15:13] ****** BlockID = 320, Lock TTH search = 95.30.157.220:18233 F?T?0?9?TTH:MMP6S4QBWB2T3W5I65AQK52NPXXP65DPVZXGIEA, Count = 6, Hash map size: 569
[2014-02-12 23:15:13] ** BlockID = 354, Lock TTH search = 128.75.167.2:28664 F?T?0?9?TTH:MJNFJXM2YGS7DV67UWFSISVBI6EN4DKBFX6RY3A, Count = 2, Hash map size: 569
[2014-02-12 23:15:13] *** BlockID = 350, Lock TTH search = 31.186.136.27:4639 F?T?0?9?TTH:DWWA34U76OMMA5DK2XNCDHLBU56CMBH6K2JVEZQ, Count = 3, Hash map size: 570
[2014-02-12 23:15:13] ** BlockID = 355, Lock TTH search = 178.155.22.30:56619 F?T?0?9?TTH:543I6KOMUQLYYAR7WADIWWYQ5S2IBEFBQ6RVARA, Count = 2, Hash map size: 571
[2014-02-12 23:15:13] *** BlockID = 353, Lock TTH search = 94.179.79.126:2890 F?T?0?9?TTH:JPEECRVYDOXMUGRLOKVFTCRKN3O5SVOIKYLH4UA, Count = 3, Hash map size: 571
[2014-02-12 23:15:14] ***** BlockID = 327, Lock TTH search = 134.17.147.66:59268 F?T?0?9?TTH:FZO4RLGFTXMA22DKLDV55XDLV64YAF6T67MQ5SI, Count = 5, Hash map size: 571
[2014-02-12 23:15:14] ** BlockID = 356, Lock TTH search = 37.215.142.54:23356 F?T?0?9?TTH:NX6KAWVAUODWQPAT6VHU4W4J6FYIPL5MXOE7KOQ, Count = 2, Hash map size: 571
[2014-02-12 23:15:14] **** BlockID = 350, Lock TTH search = 31.186.136.27:4639 F?T?0?9?TTH:DWWA34U76OMMA5DK2XNCDHLBU56CMBH6K2JVEZQ, Count = 4, Hash map size: 571
[2014-02-12 23:15:14] *** BlockID = 354, Lock TTH search = 128.75.167.2:28664 F?T?0?9?TTH:MJNFJXM2YGS7DV67UWFSISVBI6EN4DKBFX6RY3A, Count = 3, Hash map size: 571
[2014-02-12 23:15:14] *** BlockID = 343, Lock TTH search = 94.181.216.78:28799 F?T?0?9?TTH:3TMUYMWJ5HI5B7E6J6WMYJGGF5CGOVJ3AF65KTI, Count = 3, Hash map size: 571
[2014-02-12 23:15:14] ** BlockID = 357, Lock TTH search = 109.86.183.25:26400 F?T?0?9?TTH:PKA3DRXSXWWVEISPDJFGURIULRAIVS3DCH4BKMQ, Count = 2, Hash map size: 571
[2014-02-12 23:15:14] *** BlockID = 348, Lock TTH search = 176.194.70.204:57528 F?T?0?9?TTH:HE6A7VIRAES3E6UC5JJ4NUNYW4OPYJDKILCY6VI, Count = 3, Hash map size: 571
[2014-02-12 23:15:14] ***** BlockID = 350, Lock TTH search = 31.186.136.27:4639 F?T?0?9?TTH:DWWA34U76OMMA5DK2XNCDHLBU56CMBH6K2JVEZQ, Count = 5, Hash map size: 571
[2014-02-12 23:15:14] ********* BlockID = 329, Lock TTH search = 109.229.194.99:60302 F?T?0?9?TTH:NRDUKFZ2VCISMW7E5MFYY7UJSLG4RV2Y2X7TRTI, Count = 9, Hash map size: 571
[2014-02-12 23:15:14] ****** BlockID = 340, Lock TTH search = 176.15.63.196:31620 F?T?0?9?TTH:VIHIJ7YAF6JIF2EQQZZC7VZYIE66JFY2P4KL6LA, Count = 6, Hash map size: 571
[2014-02-12 23:15:14] **** BlockID = 323, Lock TTH search = 188.134.37.64:6401 F?T?0?9?TTH:GD2ZFXGJSRRWUBTFKGK2BAUYH4LRIIPP7TGGK2I, Count = 4, Hash map size: 571
[2014-02-12 23:15:14] ******* BlockID = 12, Unlock duplicate TTH search: 217.77.219.24:5044 F?T?0?9?TTH:3ODPQKUUUFEONUIW73KMCOBOVDSG6IOR2ZRC6JY, Count connect = 7, m_tth_duplicate_search.size() = 570
[2014-02-12 23:15:14] ** BlockID = 4, Unlock duplicate TTH search: 79.117.135.78:3263 F?T?0?9?TTH:X4ZEITET2QJ54UQDRTJB677U3NQ5OHNO7XSR7UQ, Count connect = 2, m_tth_duplicate_search.size() = 568
[2014-02-12 23:15:14] ***** BlockID = 156, Unlock duplicate TTH search: 92.124.12.204:1451 F?T?0?9?TTH:K5VRAQL6DHCS7QA2NDZBBE7MDD4WJPTHW2B6SWI, Count connect = 5, m_tth_duplicate_search.size() = 567
[2014-02-12 23:15:14] ***** BlockID = 184, Unlock duplicate TTH search: 91.193.175.28:7784 F?T?0?9?TTH:QOCD6GZGQYSNOIBB4FGSQ4MDR3SKKF6XMCNUCCY, Count connect = 5, m_tth_duplicate_search.size() = 565
[2014-02-12 23:15:14] ********* BlockID = 157, Unlock duplicate TTH search: 188.134.24.99:28848 F?T?0?9?TTH:D7EXZGVMUKJRENM6Y373MRA2FSIWOJV4BTDUVQI, Count connect = 9, m_tth_duplicate_search.size() = 564
[2014-02-12 23:15:14] ** BlockID = 2, Unlock duplicate TTH search: 213.176.224.69:5067 F?T?0?9?TTH:Q65BILA7B6PRUGF3P37GODBJAL353QMPQ526Y6Y, Count connect = 2, m_tth_duplicate_search.size() = 563
[2014-02-12 23:15:14] ** BlockID = 27, Unlock duplicate TTH search: 178.165.115.166:6435 F?T?0?9?TTH:RGCPJOF7Y6UAWFCK3LGXCKKHSGVIGRQPXDVJCGI, Count connect = 2, m_tth_duplicate_search.size() = 562
[2014-02-12 23:15:14] ** BlockID = 65, Unlock duplicate TTH search: 159.224.62.184:30948 F?T?0?9?TTH:SJUZK2OHVPS6ERZKHBP63ZBUKHNZY7EUKGODDPI, Count connect = 2, m_tth_duplicate_search.size() = 561
[2014-02-12 23:15:14] ***** BlockID = 21, Unlock duplicate TTH search: 93.81.249.82:64146 F?T?0?9?TTH:3A6VYER5H7I7QCIS7YHEA523SCDHEZJYB6AOBQA, Count connect = 5, m_tth_duplicate_search.size() = 560
[2014-02-12 23:15:14] *** BlockID = 34, Unlock duplicate TTH search: 109.202.37.213:55348 F?T?0?9?TTH:IWKCKNHJXXF74AUHCYZUEWLDPH5SLQDYIM366UQ, Count connect = 3, m_tth_duplicate_search.size() = 559
[2014-02-12 23:15:14] ***** BlockID = 113, Unlock duplicate TTH search: 176.97.175.25:19344 F?T?0?9?TTH:WISHZQOB6C6XXXWWD6DIMPAU3NOQSQQM2EX6DQY, Count connect = 5, m_tth_duplicate_search.size() = 556
[2014-02-12 23:15:14] **** BlockID = 1, Unlock duplicate TTH search: 37.57.75.57:22556 F?T?0?9?TTH:WZ6WLOVDSUENOIPQE3DF6C2OZTH6GEYTDG4VCLA, Count connect = 4, m_tth_duplicate_search.size() = 555
Последний раз редактировалось flylinkdc 12 фев 2014, 22:39, всего редактировалось 1 раз.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Взял версию выше, положил рядом с Settings/CustomLocations.ini , запустил "D:\_dc\fl_use_wal\FlylinkDC.exe" /sqlite_synchronous_off
Спойлер

Код: Выделить всё

[2014-02-12 21:55:23] FlylinkDC++ r503-beta28 build 16548 startup on machine with:
	Number of processors: 2.
	Processor type:  x86.
	Memory config:
		There is	28 percent of memory in use.
		There are	7.69 GiB total of physical memory.
		There are	5.53 GiB free of physical memory.

	Running in Windows WOW64 

For maximal performance needs to update your FlylinkDC to x64 version!

OS: Microsoft Windows 8.1 Professional, 64-bit).


[2014-02-12 21:55:23] [Start] [fly-server]
[2014-02-12 21:55:23] [Step ] [fly-server] Download:http://www.fly-server.ru/etc/flylinkdc-config-r5xx.xml [0 ms]
[2014-02-12 21:55:23] [Step ] [fly-server] Download and parse - Ok! [206 ms]
[2014-02-12 21:55:23] [Stop ] [fly-server] [1 ms, Total: 207 ms]
[2014-02-12 21:55:25] safeAlter: duplicate column name: hit
[2014-02-12 21:55:25] safeAlter: duplicate column name: stamp_share
[2014-02-12 21:55:25] safeAlter: duplicate column name: bitrate
[2014-02-12 21:55:25] safeAlter: duplicate column name: ftype
[2014-02-12 21:55:26] safeAlter: duplicate column name: Sections
[2014-02-12 21:55:26] safeAlter: duplicate column name: block_size
[2014-02-12 21:55:26] safeAlter: duplicate column name: media_x
[2014-02-12 21:55:26] safeAlter: duplicate column name: media_y
[2014-02-12 21:55:26] safeAlter: duplicate column name: media_video
[2014-02-12 21:55:26] safeAlter: duplicate column name: media_audio
[2014-02-12 21:55:27] [Start] [StartUp]
[2014-02-12 21:55:27] [Step ] [StartUp] Begin load Geo IP [6 ms]
[2014-02-12 21:55:27] [Start] [GeoIp]
[2014-02-12 21:55:27] Error open D:\_dc\fl_use_wal\Settings\GeoIpCountryWhois.csv
[2014-02-12 21:55:27] [Stop ] [GeoIp] [2 ms, Total: 2 ms]
[2014-02-12 21:55:27] [Step ] [StartUp] End load Geo IP [3 ms and 9 ms after start]
[2014-02-12 21:55:27] [Step ] [StartUp] Begin load Custom Locations [7 ms]
[2014-02-12 21:55:27] [Start] [CustomLocations.ini]
[2014-02-12 22:00:23] [Start] [CustomLocation-sqlite]
[2014-02-12 22:00:24] [Stop ] [CustomLocation-sqlite] [450 ms, Total: 450 ms]
[2014-02-12 22:00:24] [Stop ] [CustomLocations.ini] [296781 ms, Total: 296781 ms]
[2014-02-12 22:00:24] [Step ] [StartUp] End load Custom Locations [296783 ms and 296799 ms after start]
[2014-02-12 22:00:24] [Step ] [StartUp] Begin load SSL [2 ms]
[2014-02-12 22:00:24] [Step ] [StartUp] End load SSL [829 ms and 297630 ms after start]
[2014-02-12 22:00:24] [Step ] [StartUp] Begin load DHT [2 ms]
время импорта почти 5 минут

FlylinkDC.exe-ddos-test-4-synchronous-off.7z FlylinkDC.exe /sqlite_synchronous_off /sqltrace
Спойлер

Код: Выделить всё

[2014-02-12 22:15:49] FlylinkDC++ r503-beta28 build 16548 startup on machine with:
	Number of processors: 2.
	Processor type:  x86.
	Memory config:
		There is	30 percent of memory in use.
		There are	7.69 GiB total of physical memory.
		There are	5.34 GiB free of physical memory.

	Running in Windows WOW64 

For maximal performance needs to update your FlylinkDC to x64 version!

OS: Microsoft Windows 8.1 Professional, 64-bit).


[2014-02-12 22:15:49] [Start] [fly-server]
[2014-02-12 22:15:49] [Step ] [fly-server] Download:http://www.fly-server.ru/etc/flylinkdc-config-r5xx.xml [0 ms]
[2014-02-12 22:15:49] [Step ] [fly-server] Download and parse - Ok! [191 ms]
[2014-02-12 22:15:49] [Stop ] [fly-server] [1 ms, Total: 192 ms]
[2014-02-12 22:15:50] safeAlter: duplicate column name: hit
[2014-02-12 22:15:50] safeAlter: duplicate column name: stamp_share
[2014-02-12 22:15:50] safeAlter: duplicate column name: bitrate
[2014-02-12 22:15:50] safeAlter: duplicate column name: ftype
[2014-02-12 22:15:50] safeAlter: duplicate column name: Sections
[2014-02-12 22:15:50] safeAlter: duplicate column name: block_size
[2014-02-12 22:15:50] safeAlter: duplicate column name: media_x
[2014-02-12 22:15:50] safeAlter: duplicate column name: media_y
[2014-02-12 22:15:50] safeAlter: duplicate column name: media_video
[2014-02-12 22:15:50] safeAlter: duplicate column name: media_audio
[2014-02-12 22:15:50] [Start] [StartUp]
[2014-02-12 22:15:50] [Step ] [StartUp] Begin load Geo IP [2 ms]
[2014-02-12 22:15:50] [Start] [GeoIp]
[2014-02-12 22:15:50] Error open D:\_dc\fl_sync_off\Settings\GeoIpCountryWhois.csv
[2014-02-12 22:15:50] [Stop ] [GeoIp] [2 ms, Total: 2 ms]
[2014-02-12 22:15:50] [Step ] [StartUp] End load Geo IP [2 ms and 4 ms after start]
[2014-02-12 22:15:50] [Step ] [StartUp] Begin load Custom Locations [2 ms]
[2014-02-12 22:15:50] [Start] [CustomLocations.ini]
[2014-02-12 22:15:56] [Start] [CustomLocation-sqlite]
[2014-02-12 22:15:58] [Stop ] [CustomLocation-sqlite] [1925 ms, Total: 1925 ms]
[2014-02-12 22:15:58] [Stop ] [CustomLocations.ini] [7816 ms, Total: 7816 ms]
[2014-02-12 22:15:58] [Step ] [StartUp] End load Custom Locations [7817 ms and 7823 ms after start]
[2014-02-12 22:15:58] [Step ] [StartUp] Begin load SSL [2 ms]
8 секунд, уже что-то. вот только
With synchronization off, SQLite is sometimes much faster, but there is a risk that an operating system crash or an unexpected power failure could damage the database.
снова вся надежда на то, что эта строчка устарела, и база не навернётся по случаю?

чтобы исключить уникальность моего компа, взял ноутбук, залил туда 28 бету, с которой всё началось, удалил всё, кроме самого *.exe и Settings\CustomLocations.ini, запустил
Спойлер

Код: Выделить всё

[2014-02-12 22:22:09] FlylinkDC++ r503-beta28 build 16527 startup on machine with:
	Number of processors: 2.
	Processor type:  x86.
	Memory config:
		There is	33 percent of memory in use.
		There are	3.86 GiB total of physical memory.
		There are	2.58 GiB free of physical memory.

	Running in Windows WOW64 

For maximal performance needs to update your FlylinkDC to x64 version!

OS: Microsoft Windows 7 Ultimate Edition Service Pack 1, 64-bit).


[2014-02-12 22:22:09] [Start] [fly-server]
[2014-02-12 22:22:09] [Step ] [fly-server] Download:http://www.fly-server.ru/etc/flylinkdc-config-r5xx.xml [0 ms]
[2014-02-12 22:22:10] [Step ] [fly-server] Download and parse - Ok! [342 ms]
[2014-02-12 22:22:10] [Stop ] [fly-server] [0 ms, Total: 342 ms]
[2014-02-12 22:22:12] safeAlter: duplicate column name: hit
[2014-02-12 22:22:12] safeAlter: duplicate column name: stamp_share
[2014-02-12 22:22:12] safeAlter: duplicate column name: bitrate
[2014-02-12 22:22:12] safeAlter: duplicate column name: ftype
[2014-02-12 22:22:14] safeAlter: duplicate column name: Sections
[2014-02-12 22:22:14] safeAlter: duplicate column name: block_size
[2014-02-12 22:22:14] safeAlter: duplicate column name: media_x
[2014-02-12 22:22:14] safeAlter: duplicate column name: media_y
[2014-02-12 22:22:14] safeAlter: duplicate column name: media_video
[2014-02-12 22:22:14] safeAlter: duplicate column name: media_audio
[2014-02-12 22:22:16] [Start] [StartUp]
[2014-02-12 22:22:16] [Step ] [StartUp] Begin load Geo IP [2 ms]
[2014-02-12 22:22:16] [Start] [GeoIp]
[2014-02-12 22:22:16] Error open D:\fl\1111\Settings\GeoIpCountryWhois.csv
[2014-02-12 22:22:16] [Stop ] [GeoIp] [0 ms, Total: 0 ms]
[2014-02-12 22:22:16] [Step ] [StartUp] End load Geo IP [0 ms and 2 ms after start]
[2014-02-12 22:22:16] [Step ] [StartUp] Begin load Custom Locations [3 ms]
[2014-02-12 22:22:16] [Start] [CustomLocations.ini]
[2014-02-12 22:27:24] [Start] [CustomLocation-sqlite]
[2014-02-12 22:27:25] [Stop ] [CustomLocation-sqlite] [302 ms, Total: 302 ms]
[2014-02-12 22:27:25] [Stop ] [CustomLocations.ini] [308934 ms, Total: 308934 ms]
[2014-02-12 22:27:25] [Step ] [StartUp] End load Custom Locations [308934 ms and 308939 ms after start]
[2014-02-12 22:27:25] [Step ] [StartUp] Begin load SSL [3 ms]
[2014-02-12 22:27:26] [Step ] [StartUp] End load SSL [1035 ms and 309977 ms after start]
[2014-02-12 22:27:26] [Step ] [StartUp] Begin load DHT [2 ms]
Итого 5 минут на первоначальный парсинг и внесение в базу
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

А где был взят ноутбук - он тоже старый?
как мне повторить эти 5 минут?
может ты что-то в винде накрутил на предмет записи на диск?
Синхронизацию в off убирать опасно - любой синий экран или потеря питания и база может быть разрушена.
но получается эти 5 минут из-за нее...
не могу понять почему на моих компах/нетбуках все быстро без ключей...
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

бгг, нечем заняться, как что-то в винде подкручивать что-то для записи на диск исключительно для каких-то тестов. я указал на проблему, что с этим дальше делать - дело ваше, от меня не зависит

Да, ноут тоже старый http://catalog.onliner.by/acer/lxrm30c018 - пень b950 на 2.1 Ghz, 4 гига оперативы, винт HDD 500 Gb SATA-II 300 Seagate Momentus 5400.6 < ST9500325AS> 2.5" 5400rpm 8Mb

повторить легко - я взял файл по ссылке
Собрал еще одну тестовую сборку
http://yadi.sk/d/Mu76jA1OHnfFy
положил его в пустую папку. туда же скопировал папку Settings из 28 беты
24.01.2014 16:11 1 700 470 CustomLocations.bmp
24.01.2014 16:11 524 583 CustomLocations.ini
23.01.2013 19:03 1 297 custom_menu.xml
И просто запустил FlylinkDC.exe.
Вложения
System.log
результат
(7.02 КБ) 263 скачивания
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Ок. добавлю данный параметр в статистику.
на выходных попробую изменить алгоритм стартовой заливки справочников.
не выкидывай свои компы на мусорку :) нужно на них потестить и сравнить результаты.

По теме что скажешь?
детектор ddos - все устраивает - проблема решена или что-то забыл?
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse

Я вчера переписал алгоритм конвертации GeoIPCountryWhois.csv и CustomLocations.ini
теперь таблица fly_dic не будет вообще использоваться и название стран и провайдеров хранятся в виде текста с дублированием.
FlylinkDC_locations.sqlite потолстел от этого всего на 1М был 5024M, стал 6048M

у меня время загрузки немного сократилось.
не пропадай и появляйся вечером - нужны твои чудо-ноутбуки чтобы оценить дельту времени.

Новый алгоритм:

Код: Выделить всё

[2014-02-13 09:11:16] [Start] [StartUp]
[2014-02-13 09:11:16] [Step ] [StartUp] Begin load Geo IP [5 ms]
[2014-02-13 09:11:16] [Start] [GeoIp]
[2014-02-13 09:11:16] [Step ] [GeoIp] read:C:\vc10\r5xx\compiled\Settings\GeoIpCountryWhois.csv [9 ms]
[2014-02-13 09:11:17] [Start] [GeoIp-sqlite]
[2014-02-13 09:11:17] [Stop ] [GeoIp-sqlite] [961 ms, Total: 961 ms]
[2014-02-13 09:11:18] [Stop ] [GeoIp] [1069 ms, Total: 1078 ms]
[2014-02-13 09:11:18] [Step ] [StartUp] End load Geo IP [1087 ms and 1092 ms after start]
[2014-02-13 09:11:18] [Step ] [StartUp] Begin load Custom Locations [7 ms]
[2014-02-13 09:11:18] [Start] [CustomLocations.ini]
[2014-02-13 09:11:18] [Start] [CustomLocation-sqlite]
[2014-02-13 09:11:18] [Stop ] [CustomLocation-sqlite] [58 ms, Total: 58 ms]
[2014-02-13 09:11:18] [Stop ] [CustomLocations.ini] [135 ms, Total: 135 ms]

Старый алгоритм с режимом журнала транзакций PERSIST (по умолчанию)
в обоих случаях synchronous=FULL

Код: Выделить всё

[2014-02-12 12:32:10] [Start] [StartUp]
[2014-02-12 12:32:10] [Step ] [StartUp] Begin load Geo IP [5 ms]
[2014-02-12 12:32:10] [Start] [GeoIp]
[2014-02-12 12:32:10] [Step ] [GeoIp] read:C:\vc10\r5xx\compiled\Settings\GeoIpCountryWhois.csv [175 ms]
[2014-02-12 12:32:10] [Start] [GeoIp-sqlite]
[2014-02-12 12:32:11] [Stop ] [GeoIp-sqlite] [1116 ms, Total: 1116 ms]
[2014-02-12 12:32:11] [Stop ] [GeoIp] [1301 ms, Total: 1476 ms]
[2014-02-12 12:32:11] [Step ] [StartUp] End load Geo IP [1486 ms and 1491 ms after start]
[2014-02-12 12:32:11] [Step ] [StartUp] Begin load Custom Locations [9 ms]
[2014-02-12 12:32:11] [Start] [CustomLocations.ini]
[2014-02-12 12:32:12] [Start] [CustomLocation-sqlite]
[2014-02-12 12:32:12] [Stop ] [CustomLocation-sqlite] [58 ms, Total: 58 ms]
[2014-02-12 12:32:12] [Stop ] [CustomLocations.ini] [309 ms, Total: 309 ms]
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

никаких чудо-компов нету, только что проверил на FlylinkDC-r503-x86-beta28-build-16573-2014.02.13-07.14.43.7z на рабочем компе

i3-2100, 4 гига оперативы, винт TOSHIBA DT01ACA050 500GB 7200 RPM 32MB Cache SATA 6.0Gb/s 3.5" (этот поставлен относительно недавно и совсем не хрустит, как мой террабайтный хитачи). Печаль http://yadi.sk/d/kD6b9EDcHoqH6

Алгоритм воспроизведения -
1) скачать http://www.fly-server.ru/install/r5xx/s ... 7.14.43.7z (более свежего не заметил)
2) распаковать в произвольную папку
3) ключевое условие - удалить всё, кроме файла FlylinkDC.exe и папки Settings . Должен быть только файл программы и CustomLocations.ini для обработки, никаких предзаполненных баз, это очень важно, потому что проблема в записи
4) запустить FlylinkDC.exe
Могу научить делать такие действия через тимвьювер на любом компе/ноуте/нетбуке без ssd (там всё на порядок быстрее), тогда не надо будет тестировать только на моих магических.

Проблема очень хорошо видна по файлу sql-запросов,запуск FlylinkDC.exe /sqltrace http://yadi.sk/d/uj5S_fN8Hopzz

Код: Выделить всё

[2014-02-13 11:02:06] select key,val_str,val_number from fly_registry where segment=5
[2014-02-13 11:02:06] select id from fly_dic where name='[loc] Находится на хабе' and dic=5
[2014-02-13 11:02:06] begin;
[2014-02-13 11:02:06] insert into fly_dic (dic,name) values(5,'[loc] Находится на хабе')
[2014-02-13 11:02:06] commit;
много строчек

[2014-02-13 11:07:19] select id from fly_dic where name='[ru] Zolotoy Klyuchik Мирный республика Саха' and dic=5
[2014-02-13 11:07:19] begin;
[2014-02-13 11:07:19] insert into fly_dic (dic,name) values(5,'[ru] Zolotoy Klyuchik Мирный республика Саха')
[2014-02-13 11:07:19] commit;
[2014-02-13 11:07:19] begin;
[2014-02-13 11:07:19] delete from location_db.fly_location_ip
[2014-02-13 11:07:19] insert into location_db.fly_location_ip (start_ip,stop_ip,dic_location,flag_index) values(2130706432,2147483648,1,0)
[2014-02-13 11:07:19] insert into location_db.fly_location_ip (start_ip,stop_ip,dic_location,flag_index) values(167772160,184549376,2,1)
много строчек
[2014-02-13 11:07:26] insert into location_db.fly_location_ip (start_ip,stop_ip,dic_location,flag_index) values(1540024320,1540025344,2389,1416)
[2014-02-13 11:07:26] insert into location_db.fly_location_ip (start_ip,stop_ip,dic_location,flag_index) values(3244974080,3244975104,2389,1416)
[2014-02-13 11:07:26] commit;
основное время тратится на поштучное заполнение "begin; insert into fly_dic (dic,name) values(?,?); commit;"
нужно сделать

Код: Выделить всё

begin transaction;
 insert into fly_dic (dic,name) values(?,?); 
 insert into fly_dic (dic,name) values(?,?); 
много строчек
 insert into fly_dic (dic,name) values(?,?); 
 insert into fly_dic (dic,name) values(?,?); 
commit;
как сделать?
если запись не нашлась по "select id from fly_dic where name='[loc] Находится на хабе' and dic=5" - заносить '[loc] Находится на хабе' во временный массив (вместо непосредственной вставки в базу)

потом открыть транзакцию, перебрать массив, закрыть транзакцию. и всё, скорость первоначального импорта поднимется по сравнению с текущим просто фантастически, без запуска клиента со специфическими параметрами
Последний раз редактировалось HackFresse 13 фев 2014, 11:37, всего редактировалось 1 раз.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

begin; insert into fly_dic (dic,name) values(?,?); commit;

Больше не будет такого инсерта - вечером выложу новую сборку.
HackFresse писал(а):как сделать?
если запись не нашлась по "select id from fly_dic where name='[loc] Находится на хабе' and dic=5" - заносить '[loc] Находится на хабе' во временный массив (вместо непосредственной вставки в базу)
Без вствки в базу нельзя получить ID-шку
т.к. она у меня генерится в sqlite - из sqlite_sequence
вот в этом месте l_Cache_ID = m_flySQLiteDB.insertid();

Код: Выделить всё

//========================================================================================================
__int64 CFlylinkDBManager::get_dic_idL(const string& p_name, const eTypeDIC p_DIC, bool p_create)
{
	dcassert(!p_name.empty());
	if (p_name.empty())
		return 0;
	try
	{
		auto& l_cache_dic = m_DIC[p_DIC - 1];
		if (!p_create)
		{
			auto i =  l_cache_dic.find(p_name);
			if (i != l_cache_dic.end()) 
				return i->second;
			else
				return find_dic_idL(p_name, p_DIC, true);
		}
		__int64& l_Cache_ID = l_cache_dic[p_name];
		if (l_Cache_ID)
			return l_Cache_ID;
		l_Cache_ID = find_dic_idL(p_name, p_DIC, false);
		if (!l_Cache_ID)
		{
			sqlite3_transaction l_trans(m_flySQLiteDB);
			if (!m_insert_fly_dic.get())
				m_insert_fly_dic = auto_ptr<sqlite3_command>(new sqlite3_command(m_flySQLiteDB,
				                                                                 "insert into fly_dic (dic,name) values(?,?)"));
			sqlite3_command* l_sql = m_insert_fly_dic.get();
			l_sql->bind(1, p_DIC);
			l_sql->bind(2, p_name, SQLITE_STATIC);
			l_sql->executenonquery();
			l_trans.commit();
			l_Cache_ID = m_flySQLiteDB.insertid();
		}
		return l_Cache_ID;
	}
	catch (const database_error& e)
	{
		errorDB("SQLite - get_dic_idL: " + e.getError());
	}
	return 0;
}
Спасибо - ты круто помогаешь сделать флай быстрее.
я вечером так-же потестирую при чистой базе данных.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

Новую версию не видел. Ддос тоже не смотрел

Перекраивать структуру базы нету смысла, проблема не в базе, а просто в алгоритме работы с ней. Может, где-то что-то внутри неё и можно сделать оптимальней, но пока существенного прироста производительности можно добиться, не меняя ни структуры базы, ни режима работы с ней.

Не только при импорте CustomLocations.ini (импорт этот, кстати, очень даже можно выполнить в фоне после подключения всех хабов и спада первоначальной нагрузки), по дампу sqltrace видны другие проблемные места

Ускорить стоковый (для всех и каждого) клиент, просто добавив обработку записей пачкой.
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

вставить пачку, выбрать пачку, пробежаться по полученному массиву для получения id
Последний раз редактировалось HackFresse 13 фев 2014, 12:00, всего редактировалось 2 раза.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):i3-2100, 4 гига оперативы, винт TOSHIBA DT01ACA050 500GB 7200 RPM 32MB Cache SATA 6.0Gb/s 3.5" (этот поставлен относительно недавно и совсем не хрустит, как мой террабайтный хитачи). Печаль http://yadi.sk/d/kD6b9EDcHoqH6
D:\atata\
Названия каталога для теста - 5! :))
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):вставить пачку, выбрать пачку, пробежаться по полученному массиву для получения id
У меня таблица fly_dic - общий справочник разделенных полем DIC в него пишут с разных потоков
подобный алгоритм будет мудренный или нужно на долгое время лочить поток
я вообще отказался от этой таблицы - экономия от нормлаизации всего 1 мег диска.
+ загрузка быстрее будет - это тоже бонус.

Раньше я вытаскивал название провайдера с подзапросом через внешний ключ dic_location:

Код: Выделить всё

select (select name from fly_dic where id = dic_location),start_ip,stop_ip,flag_index
from location_db.fly_location_ip where start_ip <= ? and stop_ip > ? limit 1
А сейчас будет только одна таблица

Код: Выделить всё

select location,start_ip,stop_ip,flag_index
from location_db.fly_location_ip where start_ip <= ? and stop_ip > ? limit 1
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):по дампу sqltrace видны другие проблемные места
Пиши - свежий взгляд всегда хорошо!
поправлю.
HackFresse писал(а):Новую версию не видел. Ддос тоже не смотрел
Ну так с этого все началось
не будешь смотреть т.к. уже не интересно?
или пока время нет?
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

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

Код: Выделить всё

select id, name from fly_dic where dic=5
найти различия с полученным из *.ini, вставить пачкой в базу недостающие записи, потом снова взять весь массив с локациями их ID
обработка будет быстрой и ненапряжной как для проца, так и для диска
Если при новой структуре базы где-то дальше выборка будет быстрее - конечно, хорошо, если она действительно будет быстрее. :-)
Нужно замерять. И насколько такие запросы частые? выборка у sqlite быстрая, для "редких" операций заморачиваться не стоит, имхо

Но корректно поменять структуру базу у многих юзеров довольно непросто, по сравнению со сменой кода самого приложения
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

HackFresse писал(а):Но корректно поменять структуру базу у многих юзеров довольно непросто
В данном случае это легко - добавляем две новые колонки с типом текст

Код: Выделить всё

safeAlter("ALTER TABLE location_db.fly_country_ip add column country text");
safeAlter("ALTER TABLE location_db.fly_location_ip add column location text");
старая колонка dic_country и dic_location просто со временем отомрет и не будет заполняться/использоваться.

единственный момент с откатом

если юзер поставил новую версию она создала таблицу и потом решил откатиться на старый exe-шник
который ожидает колонку, которой нет...

но думаю таких извращенцев не так много.
Или ты видишь еще как-то проблемы?
Аватара пользователя
HackFresse
Сообщения: 507
Зарегистрирован: 02 фев 2010, 19:23

Сообщение HackFresse »

ну да, если старые колонки не удалять, то и проблемы не будет, всего-то не удалось определить какую-то локацию по IP. после добавления колонок убить дату последнего импорта, чтобы инициировать заполнение..

Проблемы не только с файлом CustomLocations.ini (он меняется очень редко, если база заполнена - задержки небольшие). На нем просто наиболее красочно проявилась проблема поштучной записи. В логах и дампе sql-запросов видны проблемы при работе с кучей хабов и при запуске команды на останов ядра, самое мое первое сообщение о проблеме с логами
Спойлер
HackFresse писал(а):flylinkdc писал(а):Если запустить флай с кеем FlylinkDC.exe /sqltrace

http://yadi.sk/d/uSUMFmLBHihUt
http://yadi.sk/d/mKLcaTvsHihWp

Основные проблемы:

Код: Выделить всё

[2014-02-11 20:23:25] [Start] [Core shutdown]
[2014-02-11 20:23:25] [Start] [User command cleanup]
[2014-02-11 20:23:25] [Stop ] [User command cleanup] [4 ms, Total: 4 ms]
[2014-02-11 20:23:25] [Stop ] [Core shutdown] [8 ms, Total: 8 ms]
[2014-02-11 20:23:59] Founded unknown NMDC connections: Trivi,Mbps,Bo,LanT,T,S:3,/0,S,S:1,:50,L:20000,/0,S:,:15,S:5,Modem,/0,,H:7/2/0,S:45,/1,B.o.,S:15,S,LAN(T1,ISDN,Satellite,BOT,DS,:20,DSL,LAN(T1),:5,WireLess,LAN(T3,Cabl,M,Bot,(P2P5),fast4yo,S:2,Wireless,Chatroom,LAN(T3),KiB/,:16,S:,Cable,/0,S:120,modem, ISDN, Satellite,:1,
[2014-02-11 20:23:59] Founded unknown NMDC tag param: O:30,I:3,O:300,O:130,Volia,O:6,Ukrtelecom,Airbites,Corbina,G:0,O:17,1.5.9,0.790,O:5,1.5.7,0.801,0.830,0.831,0.799,O:3,O:7,O:100,O:85,O:25,O:4,O:2,O:10,O:1,
[2014-02-11 20:23:59] [Start] [Core shutdown]
[2014-02-11 20:23:59] [Stop ] [Core shutdown] [0 ms, Total: 0 ms]
От первого Core shutdown до последнего Core shutdown 34 секунды

В залогированных запросах жесть вида

Код: Выделить всё

[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://tulcea-evolution.ro')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://gepard-hub.ru' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://gepard-hub.ru')
[2014-02-11 20:18:47] commit;
[2014-02-11 20:18:47] select id from fly_dic where name='dchub://electrohub.no-ip.info:888' and dic=1
[2014-02-11 20:18:47] begin;
[2014-02-11 20:18:47] insert into fly_dic (dic,name) values(1,'dchub://electrohub.no-ip.info:888')
[2014-02-11 20:18:47] commit;

Код: Выделить всё

[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Джек-Потрошитель',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('MAFIA',2546,1)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:29] begin;
[2014-02-11 20:23:29] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Admin',2544,2)
[2014-02-11 20:23:29] commit;
[2014-02-11 20:23:30] begin;
[2014-02-11 20:23:30] insert or replace into user_db.user_info (nick,dic_hub,message_count) values('Commfort',2541,1)
[2014-02-11 20:23:30] commit;
Т.е. проблемная работа со словарём будет везде, где используется словарь и поштучная запись, не только 5-й справочник с локациями.
Проблемная работа (тормоза) будет везде, где выполняется любая поштучная запись инфы (о юзерах, хабах и чего-то еще).

Переделывать нужно много в каких местах, простым перестроением базы сделать что-то будет сложно.
Аватара пользователя
flylinkdc
Сообщения: 427
Зарегистрирован: 15 дек 2013, 10:26
Хаб: dchub://dc.fly-server.ru
Откуда: Караганда -> Липецк
Контактная информация:

Сообщение flylinkdc »

Код: Выделить всё

select id from fly_dic where name='dchub://gepard-hub.ru' and dic=1
Справочник номер 1 это хабы и там не должно быть так много инсертов.
даже если я сижу на 500 хабах - инсертов будет при первом старте всего 500.
т.к. они редко меняются потом буду всегда лиш select-ы

user_db.user_info - это отдельная таблица туда пишется инфа тоже не массово а только для тех кто что-то сказал
или если у него изменился IP-адрес

Можно на таймере сканировать всех юзеров и определять какие из них стали грязные - скидывать пакетом в базу (напрмиер раз в минуту).

У тебя ведь тормозит при завершении?
сейчас в момент разрушение юзер сам себя скидывает в базу если он менял состояние (IP адрес или кол-во мессаг)
Ответить