|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Есть два сервера. На CentOS 6.8 и на Debian Jessie (8.8). На каждом есть apache, php, клиентские библиотеки Firebird и установлен пакет для ODBC (unixODBC и там, и там). Детальные конфигурации: CentOS 6.8, 64bit, PHP 5.3.3 (cli) (built: Aug 11 2016 20:33:53), apache2, php-odbc-5.3.3-48.el6_8.x86_64 Debian Jessie 8.8, 64bit, PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21), apache2, php5-odbc, unixodbc (oldstable,now 2.3.1-3 amd64 [installed]) Есть тестовый файл: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Целевой сервер с БД (еще одна машина) на Windows, там Firebird 3.0.2. Нареканий в работе всего, что с ним связано - нет. Итак: При выполнении на CentOS получаем 'All OK!'. При выполнении на Debian PHP Fatal error: Out of memory (allocated 262144) (tried to allocate 140307991625985 bytes) in /var/www/html/site/odbctest.php on line 15 Само соединение устанавливается и там, и там. Также работает вызов указанной функции напрямую из isql на Debain. Что я делал, чтобы решить проблему: Я узнал, что это ошибка может значить: 99,8% случаев в интернете касаются банального ограничения php по памяти. Но вряд ли 95 петабайт, это то, что нужно php, чтобы выполнить odbc_exec, который показывает 5 строк (из таблицы в 5 строк) типа таких: Строка1 Строка2 Строка3 Строка4 Строка5 "Про 95 петабайт" tried to allocate выдает немного разные значения, это один из результатов, в сообщении выше результат другой Остальные 0.1% - это ошибки odbc драйверов, например проблемы с NULL из-за того, что кто-то перешел с архитектуры 32bit на 64bit, а драйвер сделал плохо. Вопрос расположения бита, который отвечает за NULL. Поэтому я добавил в код coalesce, хоть моя процедура и так не возвращает null значений. А остальные - мой случай. У других пользователей (насчитал ровно 3 счастливчика на стековерфлоу, чьи вопросы, конечно, остались без ответа) требуются другие значения, скажем 13 экзабайт памяти... Еще о настройках: ProgrDB настроена в odbc.ini: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
odbcinst.ini: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Я пытался понять, в чем моя ошибка, искал различия: libOdbcFb.so одинаковые, libfbclient.so.3.0.2 взята на Debian с CentOS, там лежала в папке /usr/lib64, здесь отдельной папки в usr нет, по инструкциям еще размещают в /usr/lib. Проверял работу strace-ом. Но это для меня сложновато: единственный кусок, который я отметил - вот: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Не знаю, что и делать. Прошу, подскажите! UPD 10.11.2017: Поставили PHP 7.0, ситуация не изменилась. Думаю на 1) odbc, 2) драйвер Firebird odbc, 3) звено связку php-odbc. UPD 2: "unixodbc trace log"Ошибки не вижу в логе, хотя выполнение скрипта завершилось ошибкой как обычно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104.
UPD 3 : ситуация с попыткой обойти проблему еще более печальная. Поставил pdo_firebird через apt-get install php-pdo-firebird, всё отлично поставилось, но ошибка: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 15:03 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgr, мне кажется, вопрос не по адресу, как минимум потому, что я не вижу тут слова Firebird ODBC. https://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.5-Release/ ошибка либо в php-odbc, либо в php, а этот раздел форума не про них. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 15:09 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrошибка: Код: plaintext
Нужно или подложить в PHP свежую версию fbclient (от 3.0), или настроить FB3 на сервере - разрешить аутентификацию старым клиентом ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 15:23 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
hvladgrgrошибка: Код: plaintext
Нужно или подложить в PHP свежую версию fbclient (от 3.0), или настроить FB3 на сервере - разрешить аутентификацию старым клиентом libfbclient взял с работающего сервера CentOS, fb3 тоже настроен, соединение именно с fb3 специально тестировали, когда еще были старые сервера (и клиенты) с fb2.5. Поэтому и мысль была что готовый пакет php pdo firebird не рассчитан на 3.0. kdvgrgr, мне кажется, вопрос не по адресу, как минимум потому, что я не вижу тут слова Firebird ODBC. https://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.5-Release/ ошибка либо в php-odbc, либо в php, а этот раздел форума не про них. Добавлю, хотя во втором предложении все написано. Вопрос именно про просто firebird, просто odbc. Даже такое просто требует как минимум libOdbcFb.so, которая явно имеет отношение к firebird как таковому. То есть всем, кроме собственно сервера занимаются какие-то другие люди, и здесь я их, думаете, не найду? Это неутешительно. Потому как сервер есть, а инфраструктуры, получается, нет. Я еще буду пробовать в питоном, потому как к нему есть отдельный драйвер на оффсайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 16:02 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrlibfbclient взял с работающего сервера CentOS grgrDebian Jessie 8.8 а вы можете на 100% гарантировать, что эти две разные операционные системы полностью совместимы по ABI (двоичному программному интерфейсу) ? в общем, вы тут рискуете... "можно пропердолить, но можно и получить" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 20:35 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrДобавлю, хотя во втором предложении все написано. Вопрос именно про просто firebird, просто odbc. у вас там написано unixodbc. Есть тут что-то про ФБ? Нет. "Просто odbc" - это интерфейс. А Firebird ODBC - это драйвер между этим самым ОДБЦ-интерфейсом и ФБ. Версию последнюю я вам указал - 2.0.5. У вас в этой второй строке (и вообще нигде) таких цифр нет. grgrТо есть всем, кроме собственно сервера занимаются какие-то другие люди, и здесь я их, думаете, не найду? можно подумать, что прям все кто с ФБ работают, работают через php и odbc, причем на линуксах. Совершенно нет. Ну а если даже, вдруг, проблема в Firebird ODBC - например, в совместимости с Debian - вам кроме автора драйвера вряд-ли кто ответит. И автор драйвера тут не появляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 21:47 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgr, кстати, а почему именно вот такая прослойка - php - php-odbc - unixodbc... FB? Почему не PDO, или еще что-то? Это уже какая-то готовая система, а вы ее портировать пытаетесь? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2017, 21:58 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
kdv, по поводу Firebird. В моём вопросе всё пронизано словом Firebird. Конфиги, суть, всё. Я понимаю, что драйвер это прослойка, но именно она не работает как надо. Сейчас настроил полностью с нуля CentOS7, работает всё, а ошибка такая же Код: plaintext 1.
Мне по условию задачи надо php (на нем сайт, нужно сделать буквально пустяковую интеграцию). Далее, работает ли "родной" драйвер из пакета (php-firebird|php-insetbase) с 3.0. По-моему нет. Я уже забыл начало этой дурацкой задачи. Есть факт - работающий всего на одной машине php через php-odbc с Firebird (через libOdbcFb.so и libfbclient.so, которая по-моему вообще непосредственно имеет отношение к FB). Работающий на ура. Я сравнивал изменившиеся файлы на машинах (с их старта, текстовые файлы 100Мб и 10Мб), делал машину с нуля, и это не дает мне понять, почему не работает. Примерная причина - неправильно скомпилированный драйвер для odbc для 64-х разрядных линуксов, возможно в купе с ошибками в unixODBC 2.2.12-2.2.14. Но не факт, что дело только в этом. Какие у меня альтернативы? PDO на остальных машинах выдает ту же проблему с авторизацией, на рабочей - нет, всё работает. Отличия в настройках я не нашел. Куда копать? У меня fbclient 3.0.2. Есть какой-то нормальный способ работать с ФБ из PHP в этих условиях? p.s.: по-моему это самая логичная ветка форума, где я могу спросить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 16:50 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
У unixodbc есть клиент (вроде isql) чтобы проверить работоспособность именно unixodbc+libOdbcFb ? grgrPDO на остальных машинах выдает ту же проблему с авторизацией, на рабочей - нет, всё работает. Отличия в настройках я не нашел. Куда копать? У меня fbclient 3.0.2.А у PDO какой клиент ? IIRC, PHP любит работать только со своими приватными копиями клиентов Где конфиг Firebird (только изменённые пар-ры), который "специально тестировали, когда еще были старые сервера (и клиенты) с fb2.5" ? Вы не даёте ровно никакой значимой инф-ции, хотя слов пишете много... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 17:05 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Хотел подключить native. К php 7.0, на CentOS 7. Нашел самый невнятный док во вселенной: https://www.firebirdsql.org/file/documentation/papers_presentations/Firebird_PHP_Linux.pdf Иметь на клиенте сервер FB, чтобы собрать библиотеку для клиента, действительно? Мне даже становиться смешно (и грустно). Ну это ведь не нормально. Готовые пакеты (которые есть, скажем выполняем "yum install php-firebird") работают максимум с 2.5. На форуме вижу вопросы по FB 4, инфраструктуры по FB 3 не вижу, вижу по 2.5. И как пользоваться? --- По настройкам посмотрел сейчас. Единственное что бросилось в глаза, это WireCrypt = Enabled на сервере, при том что легаси аутентификация не включена, остальное по умолчанию, при установке совместимость не выбиралась (стоит сервер на windows). Сделано так из-за бага .NET драйвера под IIS. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 18:04 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgr, дискуссия пошла неконструктивная. Я тут соорудил пирамиду, но она падает, и во всем виноват ваш Firebird, с моими десятью прослойками все нормально, а у вас нет инфраструктуры, и т.д. А? И на почти любой вопрос ответ совсем не про то. grgr В моём вопросе всё пронизано словом Firebird. Конфиги, суть, всё. да охренеть как пронизано, что мы до сих пор не знаем используемую версию Firebird ODBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 19:44 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrПо настройкам посмотрел сейчас. Единственное что бросилось в глаза, это WireCrypt = Enabled на сервере, при том что легаси аутентификация не включенаНу так какие тогда вопросы к isc_login_error ? Лезем старым клиентом с легаси аутентификацией... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2017, 20:26 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Господа, спасибо, что тратите свое время! >> мы до сих пор не знаем используемую версию Firebird ODBC По этой ссылке взял libOdbcFb.so https://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.5-Release/OdbcFb-LIB-2.0.5.156.amd64.gz/download Новее не нашел. >> Лезем старым клиентом с легаси аутентификацией Влад, может вы и правы, но тут два варианта: 1. Клиент - самый последний, который можно взять. Самый последний доступный клиент по линукс - старый, для 2.5? Сомневаюсь, потому что есть машина, единственная, на устаревшем CentOS5, где всё работает с новым FB3. К тому же на одном не получившемся "клиенте" (Debian) не работает через php и python, но через isql работает(!). 2. Я что-то сделал не так. Наиболее вероятно, так как один раз я машину настроил (CentOS5), однако все другие машины - по сохранившемуся гайду, по руководствам с firebirdsql.org (могу найти конкретную pdf-ку), по статьям в интернете - не получилось настроить. Есть ошибки: a) PHP Fatal error: Out of memory (allocated 262144) (tried to allocate 140307991625985 bytes) in /var/www/html/site/odbctest.php on line 15 Про проблемы лечения этой ошибки я написал в первом посте. b) File "/usr/lib/python3.4/site-packages/fdb/fbcore.py", line 734, in connect "Error while connecting to database:") fdb.fbcore.DatabaseError: ('Error while connecting to database:\n- SQLCODE: -999\n- unknown ISC error 335545106', -999, 335545106) выглядит вот так в Питоне при использовании библиотеки libfbclient.so.2 напрямую (я проверил strace этот факт). Однако я не могу понял, что не так, потому как эта же библиотека используется на рабочем сервере, все версии файлов идентичны и там клиент не считает, что он отстал от сервера по версии. Это сводит меня с ума. Может быть есть какая-то другая версия libfbclient.so которая совершенно точно с поддержкой FB3, взятая у кого-то с работающего клиента, например? >> У unixodbc есть клиент (вроде isql) чтобы проверить работоспособность именно unixodbc+libOdbcFb ? Единственное, что есть родного к unixODBC это GUI-Qt пакет с графическими программами работы. У меня только консоль. При этом на машине с CentOS7 вообще нет упоминания о unixODBC, есть pocoODBC или что-то похожее, а ошибки те же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 10:40 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Я был нtправ в одном моменте: isql этот, что я указываю - оказался частью unixODBC. Не обращал внимания. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 11:15 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgr, читай документацию. В данном случае release notes. Там описано как настроить firebird 3.0 для работы с fbclient 2.5. И ещё раз уж ты не привязан к хостеру то самое время подумать о переходе на php 7.0. Там и x64 драйверы есть и сам пых работает в 2-3 раза быстрее предыдущих версий. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 11:29 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrЯ узнал, что это ошибка может значить: 99,8% случаев в интернете касаются банального ограничения php по памяти. А ничего, что первая же ссылка в гугле https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=768309 ?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:13 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
15.11.2017 13:13, Dimitry Sibiryakov пишет: > > А ничего, что первая же ссылка в гугле... гугель всем выдаёт разное. (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:17 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
C php7.2 на CentOS 7 ошибка та же. Намекните, как мне применить указанное Вами? Если честно, я это находил, поэтому и сделал кое какие выводы в первом посте. У меня нет таких ошибок с типами данных, которые приведены в пример. Ладно, учтем про Sybase, хотя у нас не Sybase. Такая же ошибка есть при работе с MS SQL, там тоже ошибка в нестандартных типах данных. p.s.: сожалею, но редактировать посты я не могу, поэтому не могу дополнять первый пост дополнительной информацией. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 14:25 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrЛадно, учтем про Sybase, хотя у нас не Sybase. Ты дальше заголовка явно не читал. Баг - в PHP, драйвера тут ни при чём. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 14:27 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgr, я не пробовал работать через odbc, но в CentOS 7 PHP 7.0 x64 PDO fbclient x64 3.0.1 Полёт нормальный. Никаких приседаний с авторизацией не делаю. Да и со старым fbclient всё легко настраивается нужно только прочитать в RN https://www.firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-compat-legacyauth.html но ты можешь продолжать упорствовать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 15:04 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
grgrp.s.: сожалею, но редактировать посты я не могу, поэтому не могу дополнять первый пост дополнительной информацией.Пиши по ходу топика, побольше конкретных ответов на вполне конкретные вопросы, что-то интересное могу собрать и в первый пост, только я пока такой нужды не наблюдаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 15:58 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, кстати, почитав баг и пройдя по ссылкам я так и не понял, пропатчили это месте в апстриме PHP или решили латать дырку требуя в каждом драйвере, чтобы функция работала Во всяком случае, как кажется тикета "PHP не проверяет возвращаемое значение" так и не создали ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 16:46 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Ariochпропатчили это месте в апстриме PHP или Ещё, апстрим-апстримом, но ведь в Дебиане "патч наложен и работает" на php 5.4 а у ТС'а - 5.6 в связи с чем дурацкий вопрос, либо у него древний 5.6, старее этого бага, либо в Дебиане пропатчили ТОЛЬКО 5.4 и не ап-портировали патч на 5.6 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 16:48 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Симонов Денис, Как вы настроили PDO в php? я фундаментально глупости с компиляцией php с указанием каталога сервера fb(!) на этой же машине не понимаю. А в исходниках 7.2 php для CentOS у меня просто не было configure. Для простых людей как я, есть просто php-pdo-firebird файл или мануал лучший, чем копия с php.net? И, пожалуйста, скажете, где вы взяли вашу версию libfbclient.so. Сравню. Мне подойдет любой обходной путь для связи с fb3.0 из линукса. Буду счастлив. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 17:00 |
|
При исполнении обычного SQL запроса через ODBC требует ненормальное количество памяти
|
|||
---|---|---|---|
#18+
Симонов Денис, тема стала интересной. Хочется повторить твой стенд и показать автору, что всё же он где-то ошибается или убедиться в обратном. Ставлю Centos 7, всё понятно. Далее PHP 7.0 x64. Из какого репозитория ты ставил PHP, remi (чтобы было максимальное совпадение)? PDO: ставим последнюю версию php-pdo? Настариваем ли мы каким-то образом сам PHP? fbclient x64: где взять твою версию? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 17:45 |
|
|
start [/forum/topic.php?fid=40&msg=39552528&tid=1561338]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 482ms |
0 / 0 |