Биллинговая система Nodeny
24 Ноября 2024, 18:20:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Функция normalize_ippool в последней ревизии 489  (Прочитано 8582 раз)
Tooreagen
Старожил
****

Карма: -7
Offline Offline

Сообщений: 257


Просмотр профиля Email
« : 11 Января 2018, 09:48:00 »

Обновился до ревизии 489 получил такое сообщение:

Код:
You need to create function normalize_ippool!
Execute in mysql:

DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER $$
CREATE FUNCTION `normalize_ippool` ()
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    CREATE TEMPORARY TABLE temp_ip_pool(
        id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
        ip_id BIGINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    );

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    INSERT temp_ip_pool (SELECT NULL, id FROM ip_pool ORDER BY realip, type, tags);
    UPDATE ip_pool i JOIN temp_ip_pool t ON i.id = t.ip_id SET i.id = t.id;
    DROP TEMPORARY TABLE IF EXISTS temp_ip_pool;

    RETURN 1;
END$$
DELIMITER ;

За что отвечает данная функция и что будет если ее не создать?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 11 Января 2018, 10:14:58 »

Причина ее введения указана в этой ветке: http://forum.nodeny.com.ua/index.php?topic=3034.0

Она вызывается после каждого ручного изменения пула ip и просто физически группирует записи. Это нужно для того, чтобы при выдаче динамических ip помочь mysql быстрее их выдавать. Для этого необходимо изменить процедуру выдачи ip - я там в примерах привел как, если коротко, то выдача свободного ip теперь идет не как "дай первый свободный ip", а как "дай любой свободный ip в данном диапазоне". В первом случае при большой нагрузке, когда много абонов в один момент пытаются получить ip, процедура пытается зарезервировать один и тот же ip, по итогу все разруливается на уровне mysql и один и тот же ip не выдается, но из-за большой нагрузки mysql может попасть в deadlock - запнется на долго, если коротко.

Если у вас такой проблемы (с дедлоками) нет - можно процедуры не менять и соответсвенно функцию не создавать. С другой стороны, почему бы в любом случае не повысить производительность системы?  
Записан
Fredik
NoDeny
Старожил
*

Карма: 5
Offline Offline

Сообщений: 362


Просмотр профиля
« Ответ #2 : 28 Сентября 2019, 21:30:28 »

может не в тему но ответа не нашел
при выполнении пишет ошибку
выполняем вот это
Цитировать
DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER 21826
CREATE FUNCTION `normalize_ippool` ( )
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    SET  = 0;
    UPDATE ip_pool SET id = :=+1 ORDER BY realip, type, tags;

    RETURN 1;
END21826
DELIMITER ;

пишет вот это
Цитировать
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 0;
    UPDATE ip_pool SET id = :=+1 ORDER BY realip, type, tags;

    RETUR' at line 8
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 29 Сентября 2019, 18:39:45 »

Пропал символ @ куда-то:

Код:
DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER $$
CREATE FUNCTION `normalize_ippool` ( )
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    SET @i = 0;
    UPDATE ip_pool SET id = @i:=@i+1 ORDER BY realip, type, tags;

    RETURN 1;
END$$
DELIMITER ;

Видимо при печати в консоль, инсталлятор отфильтровал эти символы. Исправлю
Записан
WideAreaNetwork
Старожил
****

Карма: 1
Offline Offline

Сообщений: 358


Просмотр профиля Email
« Ответ #4 : 12 Января 2022, 19:52:48 »

на насе сделали обновление, далее perl install.pl -x и получили в конце такое
Код:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
You need to create function normalize_ippool!
Execute in mysql:

DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER 71904
CREATE FUNCTION `normalize_ippool` ( )
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    SET @i = 0;
    UPDATE ip_pool SET id = @i:=@i+1 ORDER BY realip, type, tags;

    RETURN 1;
END71904
DELIMITER ;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

это заклинание выполнил в мускуле на билингу, в итоге при выполнении на насе perl install.pl -x получаю в конце вышеуказанное заклинание
подскажите плиз так и должно быть? судя по ответам в теме не должно было больше показывать это уведомление
Записан
WideAreaNetwork
Старожил
****

Карма: 1
Offline Offline

Сообщений: 358


Просмотр профиля Email
« Ответ #5 : 12 Января 2022, 19:53:21 »

пс. обновляли до версии NEXT
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #6 : 14 Января 2022, 16:22:06 »

Запусти в msql:
Код:
SELECT normalize_ippool() AS ok;
что выдает?
Записан
WideAreaNetwork
Старожил
****

Карма: 1
Offline Offline

Сообщений: 358


Просмотр профиля Email
« Ответ #7 : 14 Января 2022, 17:41:31 »

Запусти в msql:
Код:
SELECT normalize_ippool() AS ok;
что выдает?
Код:
mysql> SELECT normalize_ippool() AS ok;
+------+
| ok   |
+------+
|    1 |
+------+
1 row in set (10.40 sec)

Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 367


Просмотр профиля
« Ответ #8 : 14 Января 2022, 20:14:54 »

Такое у меня было на mysql 5.7. пришлось поставить 5.6, там такой проблемы нет
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #9 : 16 Января 2022, 01:47:12 »

не, ну откатывать мускул из-за предупреждения... Функция работает, возвращает 1. Почему скрипт это не увидел - хз, буду думать. Пока игнорьте это предупреждение
Записан
WideAreaNetwork
Старожил
****

Карма: 1
Offline Offline

Сообщений: 358


Просмотр профиля Email
« Ответ #10 : 16 Января 2022, 09:10:19 »

ок, спасибо
Записан
Warlock
NoDeny
Старожил
*

Карма: 8
Offline Offline

Сообщений: 367


Просмотр профиля
« Ответ #11 : 16 Января 2022, 18:21:10 »

Это было на тестовом сервере. В рабочем работает на 5.5. смысл обновлять, если всё работает )
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!