{"id":1040,"date":"2017-08-18T08:37:41","date_gmt":"2017-08-18T08:37:41","guid":{"rendered":"http:\/\/blog.tiran.info\/?p=1040"},"modified":"2017-08-18T08:37:41","modified_gmt":"2017-08-18T08:37:41","slug":"ore-memory-exhausted","status":"publish","type":"post","link":"https:\/\/blog.tiran.stream\/?p=1040","title":{"rendered":"ORE &#8211; Memory exhausted"},"content":{"rendered":"<p style=\"text-align: justify;\">Lors de la construction de l&rsquo;ANN du billet pr\u00e9c\u00e9dent, j&rsquo;ai rencontr\u00e9 plusieurs probl\u00e8mes de saturation m\u00e9moire du processus R lanc\u00e9 via extproc. ORE offre la possibilit\u00e9 de <a href=\"https:\/\/docs.oracle.com\/cd\/E67822_01\/OREAD\/ore_admin.htm#OREAD195\" target=\"_blank\" rel=\"noopener\">contr\u00f4ler la m\u00e9moire utilis\u00e9 par un moteur R instanci\u00e9<\/a>.<\/p>\n<p style=\"text-align: justify;\">Les valeurs limites sont accessibles via le vue RQ_CONFIG:<\/p>\n<pre class=\"brush: sql; highlight: [9,11]; ruler: true;\">SYS@HODBA04D1_1 [PDB_HODBA08] &gt; select name, value from sys.rq_config;\n\nNAME         VALUE\n------------ --------------------------------------------------\nR_HOME       \/usr\/lib64\/R\nR_LIBS_USER  \/soft\/oracle\/product\/rdbms\/12.2.0.1\/R\/library\nVERSION      1.5\nMIN_VSIZE    32M\nMAX_VSIZE    4G\nMIN_NSIZE    2M\nMAX_NSIZE    20M\n\n7 rows selected.\n\nSYS@HODBA04D1_1 [PDB_HODBA08] &gt;\n<\/pre>\n<p style=\"text-align: justify;\">Les deux valeurs importantes MAX_VSIZE et MAX_NSIZE &#8211; ces derni\u00e8res correspondent \u00e0 la m\u00e9moire maximale allouable pour les Vcells (MAX_VSIZE) et pour les Ncells (MAX_NSIZE). Lorsqu&rsquo;un moteur R embarqu\u00e9 atteint une de ces limites, l&rsquo;appel \u00e9choue avec un message :<\/p>\n<ul>\n<li>\u00ab\u00a0Error : <span style=\"color: #ff0000;\"><strong>vector<\/strong> <\/span>memory exhausted (limit reached?)\u00a0\u00bb lorsque MAX_VSIZE est atteint:<\/li>\n<\/ul>\n<pre class=\"brush: js; ruler: true;\">Error in .oci.GetQuery(conn, statement, data = data, prefetch = prefetch,  : \n  ORA-20000: RQuery error\nError : vector memory exhausted (limit reached?)\nORA-06512: at &quot;RQSYS.RQEVALIMPL&quot;, line 104\nORA-06512: at &quot;RQSYS.RQEVALIMPL&quot;, line 101\n<\/pre>\n<ul>\n<li>\u00ab\u00a0Error : <span style=\"color: #ff0000;\"><strong>cons<\/strong> <\/span>memory exhausted (limit reached?)\u00a0\u00bb lorsque MAX_NSIZE est atteint:<\/li>\n<\/ul>\n<pre class=\"brush: js; ruler: true;\">Error in .oci.GetQuery(conn, statement, data = data, prefetch = prefetch,  : \n  ORA-20000: RQuery error\nError : cons memory exhausted (limit reached?)\nORA-06512: at &quot;RQSYS.RQEVALIMPL&quot;, line 104\nORA-06512: at &quot;RQSYS.RQEVALIMPL&quot;, line 101\n<\/pre>\n<p style=\"text-align: justify;\">Il convient alors d&rsquo;augmenter la limite concern\u00e9e \u00e0 l&rsquo;aide de la proc\u00e9dure RQCONFIGSET. Ici, j&rsquo;augmente la m\u00e9moire maximale utilisable pour les Vcells \u00e0 32GB:<\/p>\n<pre class=\"brush: sql; ruler: true;\">SYS@HODBA04D1_1 [PDB_HODBA08] &gt; begin sys.rqconfigset(&#039;MAX_VSIZE&#039;, &#039;32G&#039;);\n  2  end;\n  3  \/\n\nPL\/SQL procedure successfully completed.\n\nSYS@HODBA04D1_1 [PDB_HODBA08] &gt;\n<\/pre>\n<p style=\"text-align: justify;\">En revanche, pour les Ncells, la limite est exprim\u00e9e en nombre de \u00ab\u00a0cellules\u00a0\u00bb. Chaque cellule repr\u00e9sentant 56 bytes sur un syst\u00e8me x64. Ici, j&rsquo;augmente la m\u00e9moire utilisable pour les Ncells \u00e0 5.6GB (56 bytes * 100M):<\/p>\n<pre class=\"brush: sql; ruler: true;\">SYS@HODBA04D1_1 [CDB$ROOT] &gt; begin sys.rqconfigset(&#039;MAX_NSIZE&#039;,&#039;100M&#039;);\n  2  end;\n  3  \/\n\nPL\/SQL procedure successfully completed.\n\nSYS@HODBA04D1_1 [CDB$ROOT] &gt;\n<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;\u00e9tat m\u00e9moire d&rsquo;un moteur R est accessible via la <a href=\"https:\/\/stat.ethz.ch\/R-manual\/R-devel\/library\/base\/html\/gc.html\" target=\"_blank\" rel=\"noopener\">commande gc<\/a>. On constate bien ici que les limites correspondent \u00e0 celles ajust\u00e9es pr\u00e9c\u00e9demment:<\/p>\n<pre class=\"brush: js; ruler: true;\">&gt; ore.doEval(gc)\n         used (Mb) gc trigger  (Mb) limit (Mb) max used (Mb)\nNcells 220849 11.8    1677721  89.6       5600   350000 18.7\nVcells 409436  3.2   26843545 204.8      32768   786408  6.0\n&gt;\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lors de la construction de l&rsquo;ANN du billet pr\u00e9c\u00e9dent, j&rsquo;ai rencontr\u00e9 plusieurs probl\u00e8mes de saturation m\u00e9moire du processus R lanc\u00e9<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[9],"tags":[],"class_list":["post-1040","post","type-post","status-publish","format-standard","hentry","category-oracle-r-enterprise"],"_links":{"self":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts\/1040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1040"}],"version-history":[{"count":0,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=\/wp\/v2\/posts\/1040\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.tiran.stream\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}