Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / XML процессор / 18 сообщений из 18, страница 1 из 1
09.12.2014, 16:00
    #38829152
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Доброго времени суток.

Кто-то имеет опыт использования XML-функциональности в 11-м сервере? А то у нас как-то не получается... Я тут подклеил примерчик - .NET программка и хранимая процедурка. Суть в том, что при запуске 100 параллельных нитей, время выполнения функции existsnode возрастает более, чем на 30 секунд, а программа получает ошибку:

ERROR [HY000] [Informix .NET provider][Informix]Function (existsnode) Exception received for ICU memory allocation.

В суппорт я, конечно, обратился, но они как-то не торопятся совсем... Я вот думаю, может есть какая-нибудь альтернатива? Ну, или блейд работающий (даже если и платный), или самодельное что-то, но тоже работающее...

С уважением, Л.
...
Рейтинг: 0 / 0
09.12.2014, 17:51
    #38829366
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid Vorontsov,

Я использовал XSLT-функции xsltransformasclob/xsltransform для трансформации XML, особых проблем не было.
Мало того, приятно удивила скорость и простота работы непосредственно самого XSLT-движка.
Что касается XML-функций, то они мне показались какими-то слишком медленными.
...
Рейтинг: 0 / 0
10.12.2014, 13:09
    #38830093
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid Vorontsov,

Если JOHN SMITH имеет к Вам какое-то отношение, то там ошибка в SPL-процедуре в строке
Код: sql
1.
RETURN extractvalue(...) WITH RESUME

Функция extractvalue возвращает lvarchar, которое процедурка пытается привести к типу INT
Код: sql
1.
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING INT 
...
Рейтинг: 0 / 0
10.12.2014, 13:11
    #38830101
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid Vorontsov,

И еще неплохо было бы посмотреть onstat -g glo для начала
...
Рейтинг: 0 / 0
10.12.2014, 13:40
    #38830136
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Имеет:

Код: sql
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.
IBM Informix Dynamic Server Version 11.50.FC9W2X3 -- On-Line -- Up 6 days 21:43:34 -- 6566240 Kbytes

MT global info:
sessions threads  vps      lngspins
29       89       24       31925

          sched calls     thread switches yield 0   yield n   yield forever
total:    114663718       103145889       8232883   23047284  6743228
per sec:  57              57              0         51        0

Virtual processor summary:
 class       vps       usercpu   syscpu    total
 cpu         4         6243.45   696.09    6939.54
 aio         3         78.71     114.29    193.00
 lio         1         1.35      3.38      4.73
 pio         1         1.41      3.49      4.90
 adm         1         17.05     13.76     30.81
 msc         1         15.23     4.23      19.46
 jvp         1         1.65      2.57      4.22
 fifo        1         1.37      3.48      4.85
 bts         1         1.51      2.54      4.05
 idsxmlvp    10        2207.00   47.92     2254.92
 total       24        8568.73   891.75    9460.48

Individual virtual processors:
 vp    pid       class       usercpu   syscpu    total     Thread    Eff
 1     340152    cpu         4896.30   654.30    5550.60   6571.70   84%
 2     360490    adm         17.05     13.76     30.81     0.00       0%
 3     278742    lio         1.35      3.38      4.73      4.73     100%
 4     319626    pio         1.41      3.49      4.90      4.90     100%
 5     344290    aio         40.23     80.84     121.07    4240.54    2%
 6     270354    msc         15.23     4.23      19.46     24.27     80%
 7     348340    fifo        1.37      3.48      4.85      4.85     100%
 8     356550    cpu         889.78    23.22     913.00    1968.81   46%
 9     368826    cpu         278.95    11.49     290.44    671.14    43%
 10    372924    cpu         178.42    7.08      185.50    381.84    48%
 11    377022    jvp         1.65      2.57      4.22      0.00       0%
 12    381120    bts         1.51      2.54      4.05      0.00       0%
 13    385218    idsxmlvp    1402.50   17.35     1419.85   1659.41   85%
 14    389316    idsxmlvp    716.49    9.85      726.34    822.96    88%
 15    336102    idsxmlvp    71.97     3.18      75.15     81.47     92%
 16    393414    idsxmlvp    6.81      2.56      9.37      9.37     100%
 17    397512    idsxmlvp    1.46      2.47      3.93      0.00       0%
 18    352480    idsxmlvp    1.52      2.52      4.04      0.00       0%
 19    401610    idsxmlvp    1.49      2.47      3.96      0.00       0%
 20    405708    idsxmlvp    1.56      2.47      4.03      0.00       0%
 21    409806    idsxmlvp    1.61      2.52      4.13      0.00       0%
 22    418002    idsxmlvp    1.59      2.53      4.12      0.00       0%
 23    131194    aio         21.14     20.63     41.77     2223.68    1%
 24    618562    aio         17.34     12.82     30.16     1558.76    1%
                 tot         8568.73   891.75    9460.48
...
Рейтинг: 0 / 0
10.12.2014, 13:55
    #38830165
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid Vorontsov,

Я, конечно, не знаю логики Вашего приложения, но посоветовал бы использовать таки XSLT вместо XML-функций.
Надежнее и быстрее.
Ваш пример я бы переделал немного.
Код: sql
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.
execute procedure ifx_allow_newline('t');
drop PROCEDURE if exists test_existsnode;
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING lvarchar;
 DEFINE v_i INT;
 DEFINE v_xml lvarchar;
 DEFINE v_xslt lvarchar;
 LET v_xml = '<?xml version="1.0" encoding="UTF-8"?>
<decl_plan>
    <row>
        <id_nodoklmaks>990969903</id_nodoklmaks>
    </row>
</decl_plan>
';
 LET v_xslt = '<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
                xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output method="text"
                encoding="UTF-8"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="/decl_plan/row">
        <xsl:for-each select="id_nodoklmaks">
            <xsl:value-of select="text()"/>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
';
 FOR v_i IN (1 TO 1000)
     RETURN p_i WITH RESUME;
     RETURN v_i WITH RESUME;
     return xsltransform(v_xml, v_xslt) with resume;
 END FOR;
END PROCEDURE; 
execute procedure ifx_allow_newline('f');
select current from table(set{1});
execute PROCEDURE test_existsnode(1);
select current from table(set{1});


На виртуалке SUSE c 512мБ памяти и одним процессором время выполнения менее 1 сек
...
Рейтинг: 0 / 0
10.12.2014, 14:34
    #38830220
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Хорошо, поменяем:

Код: plaintext
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING INT;

на:

Код: plaintext
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING LVARCHAR(32000);

Так будет нормально? Но результат тот же...
...
Рейтинг: 0 / 0
10.12.2014, 14:58
    #38830254
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid VorontsovХорошо, поменяем:

Код: plaintext
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING INT;

на:

Код: plaintext
CREATE PROCEDURE test_existsnode(p_i INT) RETURNING LVARCHAR(32000);

Так будет нормально? Но результат тот же...
Ну, во-первых, результирующий сет данных в Informix не может превышать 32к, поэтому LVARCHAR(32000) не совсем нормально. Если Вы будете использовать эту функцию в селекте вкупе с другими значениями, то размера сета может не хватить.
А во-вторых, непонятна цель программы, что Вы хотите получить в конечном итоге? Если Вы хотите, чтобы она заработала именно в таком виде, в котором Вы ее разработали, без изменений, тогда, боюсь, что поможет только техсаппорт. Ошибка возникает на сервере или на клиенте?
...
Рейтинг: 0 / 0
10.12.2014, 15:36
    #38830310
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Цель наша проста - по заданному XPATH получить конкретное значение. Но при нескольких, одновременно работающих, клиентах, время от времени получается упомянутая ошибка. То, что я здесь привёл в самом начале - это только пример для демонстрации проблемы. А ошибка, как я понимаю, возникает на сервере, но возвращается клиенту. Как-то так...
...
Рейтинг: 0 / 0
10.12.2014, 15:51
    #38830345
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid VorontsovЦель наша проста - по заданному XPATH получить конкретное значение. Но при нескольких, одновременно работающих, клиентах, время от времени получается упомянутая ошибка. То, что я здесь привёл в самом начале - это только пример для демонстрации проблемы. А ошибка, как я понимаю, возникает на сервере, но возвращается клиенту. Как-то так...
Попробуйте отловить ошибку:
onmode -I <iserrno> [<session ID>]
...
Рейтинг: 0 / 0
10.12.2014, 16:31
    #38830424
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid VorontsovЦель наша проста - по заданному XPATH получить конкретное значение. Но при нескольких, одновременно работающих, клиентах, время от времени получается упомянутая ошибка. То, что я здесь привёл в самом начале - это только пример для демонстрации проблемы...
Я не стал использовать Вашу SQL-процедуру в качестве теста, а составил свою (текст см. чуть выше). Она выполняет ту же самую задачу - по заданному XPATH получить конкретное значение.
На виртуальной SuSE 512 мБ памяти, 1 процессор, IDS 11.70.FC7 скрипт
Код: plaintext
for i in {1..100}; do echo "execute procedure test_existsnode($i);" | dbaccess tmpdb& done
одновременно открыл примерно 100 пользовательских сессий и отработал без проблем.
...
Рейтинг: 0 / 0
11.12.2014, 14:27
    #38831408
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
авторonmode -I <iserrno>
Приложил (1/3).
...
Рейтинг: 0 / 0
11.12.2014, 14:27
    #38831409
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
2/3
...
Рейтинг: 0 / 0
11.12.2014, 14:28
    #38831410
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
3/3
...
Рейтинг: 0 / 0
11.12.2014, 18:30
    #38831833
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid VorontsovПриложил (1/3).
Честно, не смог распаковать :(
...
Рейтинг: 0 / 0
12.12.2014, 11:06
    #38832224
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Я запаковывал вот этим. Должно распаковать из 3-х af.a* в один обычный af.zip командой:

arj x -v af
...
Рейтинг: 0 / 0
12.12.2014, 13:23
    #38832387
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
Leonid Vorontsov,

Да, спасибо, Ваш архив распаковал.
Интересен был стек во время эксепшна, но он мало чего показал.
С памятью у Вас все нормально. Есть две сессии с ошибкой -8354.
Ошибка возникает только при выполнении SQL:
Код: sql
1.
execute function extractvalue("<decl_plan><row><id_nodoklmaks>990969903</id_nodoklmaks></row></decl_plan>",  "/decl_plan/row[2]/id_nodoklmaks");


Я не силен в XML, но по-моему XPATH-выражение указывает на несуществующую ноду в XML. Возможно, в Вашей версии присутствует баг при обработке такой ситуации. В любом случае, мне кажется сначала надо проверить на существование узла и только потом пытаться найти его значение. Это в качестве workaround.

Далее. Хоть это и некритично, но количество виртуальных процессоров idsxmlvp=10 явно завышено. Смысла нет делать больше чем есть физических процессоров в наличии, просто будут простаивать и занимать память, что, собственно и видно из onstat -g glo.

И еще, меня несколько напрягает дата последнего архивирования. Даже для тестовых систем 3 месяца без архивов - это многовато:)

Возможно, у кого-то еще могут появиться замечания по Вашей системе
...
Рейтинг: 0 / 0
19.12.2014, 14:47
    #38838162
Leonid Vorontsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML процессор
авторсначала надо проверить на существование узла
Да так и делаем...

авторidsxmlvp=10 завышено
Это был просто эксперимент (никак не влияет, кстати). Но спасибо за комментарий.

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

Теперь по теме. Постепенно выяснилось, что предложенного мной репро-сценария недостаточно (я тоже поверил на слово). Проблема возникает при ещё каких-то дополнительных условиях. Правда, при каких именно - пока не непонятно. Но возникает стабильно. Суппорт подключили, но пока безрезультатно. Что делать дальше, пока не знаю. Вот, как-то так...
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / XML процессор / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]