Tasca #4963
tancatErrors en la indexació d'autors com a frase (camp sencer)
Descripció
Des de fa uns dies m'estic trobant amb missatges d'aquest estil:
Error when putting the term ''Navau, Carles, 0000-0003-4763-5305'' into db (hitlist=intbitset([188837])): (167, "Out of range value for column 'id' at row 1")
- 2018-04-11 16:52:53 -> InternalError: (167, "Out of range value for column 'id' at row 1") (connections.py:36:defaulterrorhandler)
Segons tots els indicis, sembla que es tracta que el valor de la columna de l'índex (de qualsevol camp?) ha arribat al seu màxim. Si ho entenc bé, ara mateix no s'estan indexant termes nous, per al menys algun dels índexos. Si ho entenc bé, els termes ja existents s'estan indexant correctament, i se li afegeixen els números de registre nous, però si es tracta de termes nous, no.
Si ho entenc bé, es tractaria de canviar el tipus de la columna 'id' del tipus numèric actual a un que pugui créixer més, com bigint:
- https://stackoverflow.com/questions/14284494/mysql-error-1264-out-of-range-value-for-column
- https://stackoverflow.com/questions/5369816/converting-table-index-from-int-to-bigint-mysql
Els camps numèrics de MariaDB (MySQL) són aquests:
https://mariadb.com/kb/en/library/data-types-numeric-data-types/
Aquesta operació, evidentment, fa una mica de paüra, voldria fer-ho abans al servidor de proves, i requerirà que mentrestant el DDD no estigui accessible; probablement ho faré el cap de setmana.
Després hauré de reindexar els registres modificats des que vaig rebre el primer d'aquests errors, ja repassaré quan.
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
Les taules amb un camp anomenat id més grans són aquestes:
ddd@mompou:~$ for table in $(echo 'show tables;' | dbexec | grep ^idx.*F$); do max=$(echo "select max(id) from $table;" | dbexec) && echo $max $table; done | sort -rnk 2 | most
max(id) 85185614 idxWORD09F max(id) 16772237 idxPHRASE04F max(id) 6326201 idxPAIR01F max(id) 3723255 idxPAIR03F max(id) 3330514 idxWORD01F max(id) 2651580 idxPHRASE01F max(id) 579616 idxPAIR08F max(id) 567830 idxPAIR09F max(id) 518567 idxPAIR14F max(id) 514283 idxPHRASE09F max(id) 474509 idxWORD03F max(id) 257787 idxPAIR11F max(id) 227086 idxPAIR04F max(id) 212010 idxPHRASE08F max(id) 200107 idxPAIR05F [...]
D'altra banda, el camp `id` de la taula idxWORD09F sembla que ja la vaig convertir de mediumint(9) a int(10) fa algun temps:
ddd@mompou:~/tmp$ mysqldump --no-data ddduab | awk '/CREATE/ { table = $0 } /`id`/ && /AUTO_INCREMENT/ { print table, $0 }'
[...] CREATE TABLE `idxPHRASE01F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE02F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE03F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE04F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE05F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE06F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE07F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE08F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE09F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE10F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE11F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE12F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE13F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE14F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE15F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE16F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE17F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE18F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE19F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE20F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE21F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE22F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE23F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE24F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE25F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE26F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD01F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD02F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD03F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD04F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD05F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD06F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD07F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD08F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD09F` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD10F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD11F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD12F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD13F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD14F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD15F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD16F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD17F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD18F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD19F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD20F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD21F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD22F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD23F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD24F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD25F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxWORD26F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, [...]
L'índex 04 és el d'autors, segons https://ddd.uab.cat/admin/bibindex/bibindexadmin.py i, a més, els casos d'error que m'envia per email Invenio semblen, efectivament, tots de frases d'autors:
- Error when putting the term ''Castany F\xc3\xa1bregas, Jos\xc3\xa9'' into db (hitlist=intbitset([188817])): (167, "Out of range value for column 'id' at row 1")
- Error when putting the term ''M\xc2\xaa Jos\xc3\xa9 Castany F\xc3\xa1bregas'' into db (hitlist=intbitset([188817])): (167, "Out of range value for column 'id' at row 1")
- Error when putting the term ''R Fontova Forcada'' into db (hitlist=intbitset([188839, 188840])): (167, "Out of range value for column 'id' at row 1")
- Error when putting the term ''D Garcia Bl\xc3\xa0zquez'' into db (hitlist=intbitset([188765])): (167, "Out of range value for column 'id' at row 1")
- Error when putting the term ''L Puig i Ferriol'' into db (hitlist=intbitset([188788])): (167, "Out of range value for column 'id' at row 1")
Per tant dedueixo que tot quadra per concloure que es tracta de canviar el tipus id de la taula idxPHRASE04F de mediumint(9) a int(10) com per idxWORD09F.
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
- S'ha actualitzat Descripció (diferències)
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
Una altra verificació: el rang de valors per un camp mediumint és (https://mariadb.com/kb/en/library/mediumint/); hi afegeixo els punts de milers jo, per facilitar-ne la lectura:
- signed:-8.388.608 to 8.388.607
- unsigned: 0 to 16.777.215
Per tant, si max(id) 16.772.237 idxPHRASE04F, ja sembla ser això.
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
Per tant, el que he de fer és (https://mariadb.com/kb/en/library/alter-table/#modify-column):
echo 'ALTER TABLE idxPHRASE04F MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT;' | dbexec
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
Provant-ho abans al servidor de proves, primer amb Traces i després el DDD, sembla que tot és molt ràpid (menys de 2 segons per Traces i menys de 12 pel DDD) i fàcil:
A Traces:
traces@taltabull:~$ time echo 'ALTER TABLE idxPHRASE04F MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT;' | dbexec real 0m1.652s user 0m0.008s sys 0m0.000s traces@taltabull:~$
Confirmem que ha funcionat:
traces@taltabull:~$ mysqldump --no-data traces | awk '/CREATE/ { table = $0 } /`id`/ && /AUTO_INCREMENT/ { print table, $0 }' | most
[...] CREATE TABLE `idxPHRASE01F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE02F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE03F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE04F` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE05F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE06F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE07F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, [...]
Al DDD:
ddd@taltabull:~$ time echo 'ALTER TABLE idxPHRASE04F MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT;' | dbexec real 0m11.742s user 0m0.000s sys 0m0.008s ddd@taltabull:~$
Comprovació:
ddd@taltabull:~$ mysqldump --no-data ddduab | awk '/CREATE/ { table = $0 } /`id`/ && /AUTO_INCREMENT/ { print table, $0 }' | most
[...] CREATE TABLE `idxPHRASE01F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE02F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE03F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE04F` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE05F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE06F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, CREATE TABLE `idxPHRASE07F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT, [...]
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
Com que només afecta l'índex de frase d'un sol camp (autor), no caldrà aturar el servei, ja que hem comprovat que serà prou ràpid (no crec que arribi als 20 segons), però sí que caldrà refer tot l'índex d'autors. Mentre es reindexa es pot consultar sense problemes; en faig una prova al servidor de proves per tenir una estimació del que pugui trigar, però ja és només per curiostat, ja que ho faré el cap de setmana:
ddd@taltabull:~$ bibindex -R -w author 2018-04-12 12:18:20 --> Task #355671 submitted.
Ha trigat una mica menys d'una hora:
$ ddd@taltabull:~$ ilog 355671 2018-04-12 12:18:23 --> Task #355671 started. [...] 2018-04-12 13:12:39 --> Task #355671 finished. [DONE]
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
- Tema ha canviat de Problemes amb la indexació (de nous termes?) a Errors en la indexació d'autors com a frase sencera (camp sencer)
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
- Tema ha canviat de Errors en la indexació d'autors com a frase sencera (camp sencer) a Errors en la indexació d'autors com a frase (camp sencer)
FJ Actualitzat per Ferran Jorba fa quasi 8 anys
- Estat ha canviat de Creada a Tancada
Fet a Mompou, el DDD públic:
ddd@mompou:~$ time echo 'ALTER TABLE idxPHRASE04F MODIFY id int(10) unsigned NOT NULL AUTO_INCREMENT;' | dbexec
real 0m18.551s
user 0m0.000s
sys 0m0.008s
ddd@mompou:~$ mysqldump --no-data ddduab | awk '/CREATE/ { table = $0 } /`id`/ && /AUTO_INCREMENT/ { print table, $0 }' | most
[...]
CREATE TABLE `idxPHRASE01F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE02F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE03F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE04F` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE05F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE06F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
CREATE TABLE `idxPHRASE07F` ( `id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
[...]
ddd@mompou:~$ bibindex -R -w author
2018-04-13 05:44:47 --> Task #482244 submitted.
[...]
2018-04-13 06:40:36 --> Task #482244 finished. [DONE]
CA Actualitzat per Cristina Azorin fa quasi 8 anys
- Prioritat ha canviat de Immediata a Normal
CA Actualitzat per Cristina Azorin fa aproximadament 7 anys
- Paraula clau s'ha suprimit (
JR)