Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Щас проверим, знаю только что при insert returning тип тоже был isc_info_sql_stmt_exec_procedure.
15 дек 16, 13:17    [20006775]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Симонов Денис
Павел Ишенин,

запросы с returning возвращают isc_info_sql_stmt_exec_procedure


Спасибо, не знал об этом. Тогда видимо проблем с патчем Dorin Marcoci быть не должно.
15 дек 16, 13:23    [20006806]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Все работает правильно:

$S = $D->prepare('update ta_test set name = :name where id = :id returning id');
$S->execute(['id' => 1, 'name' => 'AAA']);
$S->execute(['id' => 1, 'name' => 'BBB']);

Курсор не открывается.
15 дек 16, 13:23    [20006807]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Денис, вчерашняя статья на хабре учетная, поздравляю!
Кстати, нужно добавить доддержку файра и для Doctrine.
Очень многие фрэймворки используют ее, и следовательно будет и продвижение.
Вот в phpbb3,4 выкинули поддержку :(
Получается DBMS хорошая, а продвижение и маркетинг - почти ноль.
А то, будет медленно умирать как десктопная дб для делфи...
Или может нанять маркетолога. Еще и сайт файра на бутстрапе чтоб респонсив был.
Заодно и где-то и список сайтов, built with Firebird :) У нас есть кучка.
Вот такой вот маленький оффтоп.
15 дек 16, 13:40    [20006906]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Dorin Marcoci,

Спасибо. Как только исправление по returning попадёт в драйвер PDO, выпилю кусок гавнокода из моего драйвера Laravel, а то там для тройки прыжки в ширину приходилось делать.
15 дек 16, 13:55    [20006983]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Хэллоу! Все проснулись? С праздником!
Я пилил в своем брэнче фичу чтоб целые типы (SMALLINT, INTEGER, BIGINT) возвращались как целые в PHP а не как щас - строки.
Если кому-то интересно протестировать, буду очень рад, так как не хочется сломать что-то другое, особенно на x86.
Исходники: https://github.com/madorin/php-src/tree/fb_native
2 янв 17, 18:14    [20069395]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Gallemar
Member

Откуда: г.Иркутск
Сообщений: 5149
Dorin Marcoci
Хэллоу! Все проснулись? С праздником!

Привет. Я и не ложился. С праздником тебя!!!
3 янв 17, 18:38    [20071239]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Денис, сегодня вышел 7.0.15 и 7.1.1 с
* Fixed bug #72931 (PDO_FIREBIRD with Firebird 3.0 not work on returning statement).
19 янв 17, 17:26    [20123885]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Dorin Marcoci,

отлично. Спасибо. Подкручу свой модуль для Laravel
19 янв 17, 17:41    [20123998]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Dorin Marcoci
Member

Откуда:
Сообщений: 261
Добавил поддержку булеан полей: https://github.com/php/php-src/pull/2522
Testers are welcome :)
13 май 17, 17:38    [20479112]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Заметил утечку памяти при работе с blob-полями (тестировалось на Yii). Сделаю на днях тест на чистом pdo_firebird.
27 май 18, 16:50    [21444174]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28117
Павел Ишенин,

с этим не сюда, а в Yii. Если бы утечка была в ФБ, об этом давно было бы известно и исправлено. А так - хрен знает что компонентописатели пишут. Может и с утечкой. Но исправлять-то тогда Yii надо.
27 май 18, 19:12    [21444386]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
kdv,

не в fb и не Yii, а в pdo драйвере. Раз уж Dorin Marcoci взялся в нём ошибки править, то логично к нему постучаться. Само сообщество PHP довольно вялое. По крайней мере баги в PDO драйвере для Firebird них не в приоритете, вот если в mysql-ом драйвере ошибку нашли то реагируют значительно быстрее.
27 май 18, 19:38    [21444433]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Yii тут не причем.

Вот код на чистом php:
<?php

$dbh = new PDO('firebird:dbname=...;role=...;charset=UTF8', "...", "...") or die;

$limit = 250;
$offset = 0;

while (true) {
   $start = $offset + 1;
   $stop = $offset + $limit;

   $sql = "SELECT * FROM tablename ROWS {$start} TO {$stop}";
   $stmt = $dbh->prepare($sql);
   $stmt->execute();
   $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
   if (count($rows) < $limit) {
     return;
   }
   unset($stmt);
   $rows = null;
   $offset += $limit;
   echo "used: " . memory_get_usage(true) . "\r\n";
}
unset($dbh);


Вот итоги использования памяти:

used: 10485760
used: 16777216
used: 20971520
used: 27262976
used: 33554432
used: 37748736
used: 41943040
used: 46137344
used: 52428800
used: 58720256
used: 62914560
used: 69206016
used: 75497472
28 май 18, 04:38    [21444997]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Забыл добавить, что тестировалось на php 7.1.18 windows. В таблице 2 блоб поля для которых используется следующий домен:
CREATE DOMAIN T_MEMO AS BLOB SUB_TYPE 1 CHARACTER SET UTF8
28 май 18, 05:03    [21444999]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
При анализе кода pdo_firebird вот первое за что цепляется глаз:
*ptr = S->fetch_buf[colno] = erealloc(*ptr, *len+1);


Зачем там erealloc? Разве где-то память выделяется ранее? И если нет, то всегда ли там null?

Под все остальные типы используется следующая конструкция:
*ptr = FETCH_BUF(S->fetch_buf[colno], char, *len, NULL);
28 май 18, 06:19    [21445019]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1642
Симонов Денис
kdv,

не в fb и не Yii, а в pdo драйвере. Раз уж Dorin Marcoci взялся в нём ошибки править, то логично к нему постучаться. Само сообщество PHP довольно вялое. По крайней мере баги в PDO драйвере для Firebird них не в приоритете, вот если в mysql-ом драйвере ошибку нашли то реагируют значительно быстрее.


самым правильным вариантом будет найти утечку, исправить и сделать пул реквест
28 май 18, 08:26    [21445149]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1642
как минимум зарепортить, если такого тикета еще нет
28 май 18, 08:26    [21445151]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Дегтярев Евгений,

Для начала хотелось бы подтверждения от других участников, что
- либо утечка действительно подтверждается
- либо я что-то делаю не так.
28 май 18, 09:12    [21445217]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Павел Ишенин,

не факт что утечка есть. Менеджер памяти PHP не обязан моментально освобождать память.
Ну и не плохо бы проверить разные варианты, когда есть BLOB поле и когда его нет.

Павел Ишенин
Зачем там erealloc? Разве где-то память выделяется ранее? И если нет, то всегда ли там null?


я не слишком разбираюсь во внутренностях PHP, но для BLOB заранее память может быть выделена разве что для ISC_QUAD и Null флага. А вот с самим содержимым BLOB намного сложнее, там как раз память должна выделяться если блоб не пустой. А вот когда оно должно освобождаться хз, по идее по правилам PHP
28 май 18, 09:34    [21445283]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1642
Павел Ишенин,

а как тестируете?
консольно вряд ли получится
имеет смысл сделать скрипт, например test.php, в той же папке запустить php в режиме девсервера, дать нагрузку и смотреть за расходом памяти
> php -S localhost:8000
> ab -n 10000 http://localhost:8000/test.php

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

зы
проверьте тот же сценарий с расширением interbase (ibx_)
28 май 18, 09:49    [21445331]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Дегтярев Евгений,

Тестирую именно консолью. Обратите внимание на скрипт - это просто последовательный запрос таблицы по 250 строк. На моей таблице > 200 тысяч строк я получаю превышение памяти в php. Я пробовал этот скрипт и с принудительной сборкой мусора и без.

Если вдаваться в логику, то statement при смерти должен удалять буферы, и как следствие память не должна расти при запросе очередной порции строк. Более того, я проверил этот скрипт на postgres и там действительно нет роста памяти.
28 май 18, 11:23    [21445726]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1642
Павел Ишенин,

а что с ibase_?
извиняюсь, в пред сообщении написал ibx
28 май 18, 11:34    [21445777]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Павел Ишенин
Member

Откуда: Красноярск
Сообщений: 358
Дегтярев Евгений
а что с ibase_?
извиняюсь, в пред сообщении написал ibx


Может ли это помочь проблеме? И если да, то как?
28 май 18, 11:44    [21445848]     Ответить | Цитировать Сообщить модератору
 Re: PDO Firebird bugs  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9831
Дегтярев Евгений,

в ibase_ работа с BLOB реализована чуток иначе. Там есть два режима вычитки блобов.

1. При фетче читается только blob_id из которого ibase_ функциями можно прочитать содержимое
2. Читается всё содержимое блоба при фетче (при соответствующем флаге)

Я так понимаю эти два случая надо рассматривать отдельно. Скорее всего 1-ый случай работает без косяков, так как управление хендлами отдаётся на откуп пользователю (см. ibase_blob_close).
28 май 18, 11:48    [21445862]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6 7   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить