Page 1 of 2

Rendimiento OpenKM

PostPosted:Wed Nov 07, 2012 8:02 am
by dix
Hola a todos,

Estoy implementando el OpenKM en mi empresa para gestionar toda la documentación que ahora mismo tenemos en un NAS. El volumen de datos es de 60000 archivos aproximadamente y 77GB de datos. He estado leyendo en el foro que según el volumen de datos que se tenga hay que implementar OpenKM con MySQL y no con HSQL.

Instalé la versión 6.2 con la instalación por defecto (HSQL me imagino). El rendimiento no es malo, en el okm:root no tenemos más de 10 niveles. El problema es que a veces, cuando estamos varios trabajando (somos 12 personas), tarda bastante rato en cargar la taxonomía. También he visto que la cpu se pone al 100% en el proceso /opt/openkm-6.2.0-community/java/bin/java. El servidor donde está instalado es un powerDell R510 Intel Xeon 2.67Ghz 8 núcleos con 6GB de RAM 1TB de disco duro SATA. El sistema operativo es un Debian 6.

¿Creéis que sería necesario migrar hacia un instalación de OpenKM con MySQL? ¿Realmente se nota en el rendimiento?

En caso afirmativo, ¿Hay algún sistema para migrar todos los documentos? ¿Qué habría que hacer en este caso?

Un saludo y gracias.

Re: Rendimiento OpenKM

PostPosted:Thu Nov 08, 2012 8:03 am
by jllort
Efectivamente te aconsejo migrar a una MYSQL ( lo mas limpio es hacer una instalación en paralelo ).

Aqui tienes como montarlo en una mysql http://wiki.openkm.com/index.php/MySQL-OpenKM_6.2
Puedes inspirarte en la guia de migracion para sacar las sql de los usuarios http://wiki.openkm.com/index.php/Migrat ... .11_to_6.2 ( no van a ser exactamente las mismas pero lo que te interesa son las tablas de usuarios, roles, etc... )
Y para los datos simplemente te vas a la administracion exporta con metadatos y historico y luego importa.

Que la CPU se ponga al 100% es normal cuando esta indexando etc... Yo al tomcat le asignaria 2GB de ram ( mira el fichero setenv.sh )

Re: Rendimiento OpenKM

PostPosted:Thu Nov 08, 2012 9:06 am
by dix
Hola jllort.

Migraré a MySQL aunque he visto que las tablas que crea automáticamente el OpenKM usan el engine MyISAM. ¿No sería recomendable usar InnoDB? ¿Habría algún tipo de problema con los datos al cambiar el motor?

Le echaré un vistazo a la asignación de memoria para el tomcat.

Gracias por la info y felicidades por el trabajo, muy buen programa.

Saludos.

Re: Rendimiento OpenKM

PostPosted:Thu Nov 08, 2012 6:29 pm
by jllort
Al contrario se tiene que utilizar innoDB - que es transaccional - en la documentación no estaba especificado, lo he añadido, se nos ha pasado por alto esto.
Aunque últimamente en la instalación de la mysql - por defecto - he visto que ya viene con el motor de inodb activado.

Re: Rendimiento OpenKM

PostPosted:Fri Nov 09, 2012 7:45 am
by dix
Ok.

Lo pregunté porque cuando hice un "alter table" me dió un warning de las key de una tabla:
Code: Select all
alter table OKM_DB_METADATA_VALUE ENGINE = InnoDB
Warning: Specified key was too long; max key length is 767 bytes
Por cierto, en el wiki de MySQL la base de datos se llama okm_app y realmente (después de pelearme con los logs) se tienen que llamar okmdb. Estaría bien corregirlo en el wiki para que la gente no se pegue cabezazos porque no se instalan las tablas.

Un saludo.

Re: Rendimiento OpenKM

PostPosted:Sat Nov 10, 2012 9:04 am
by jllort
Corregido en la wiki

Re: Rendimiento OpenKM

PostPosted:Sun Nov 11, 2012 8:09 am
by pavila
Te recomiendo usar una night build reciente, que puedes bajar de http://integration.openkm.com/6.2/, crear la base como Innodb y luego crear las tablas desde cero con la propiedad de configuración:
Code: Select all
hibernate.hbm2ddl=create

Re: Rendimiento OpenKM

PostPosted:Mon Nov 12, 2012 8:56 am
by dix
Sí. Descargué la night build porque la 6.2.0 tiene el bug del explorador de archivos al querer exportar o importar el repositorio. El alter table parece que funciona correctamente. Llevo importados 80Gb y todo correctamente.

Un saludo.

Re: Rendimiento OpenKM

PostPosted:Mon Nov 12, 2012 7:49 pm
by jllort
Esta semana sin falta actualizaremos la actual versión de la community que resolverá un par de bugs tediosos.

Re: Rendimiento OpenKM

PostPosted:Thu Nov 15, 2012 12:11 pm
by dix
Hola,

Al hilo de la implementación con MySQL, revisando el catalina.log estoy viendo este tipo de errores:
Code: Select all
012-11-15 10:24:53,625 [Text Extractor Worker] ERROR org.hibernate.util.JDBCExceptionReporter - Incorrect string value: '\xF0\x9D\x91\x89\xF0\x9D..
.' for column 'NDC_TEXT' at row 1
2012-11-15 10:24:53,625 [Text Extractor Worker] WARN  com.openkm.extractor.TextExtractorWorker - could not update: [com.openkm.dao.bean.NodeDocument
#04364c17-0e99-46c7-aa6d-50722918b6b6]
com.openkm.core.DatabaseException: could not update: [com.openkm.dao.bean.NodeDocument#04364c17-0e99-46c7-aa6d-50722918b6b6]
        at com.openkm.dao.NodeDocumentDAO.textExtractorHelper(NodeDocumentDAO.java:1203)
        at com.openkm.extractor.TextExtractorWorker.processSerial(TextExtractorWorker.java:138)
        at com.openkm.extractor.TextExtractorWorker.processQueue(TextExtractorWorker.java:125)
        at com.openkm.extractor.TextExtractorWorker.run(TextExtractorWorker.java:80)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Caused by: org.hibernate.exception.GenericJDBCException: could not update: [com.openkm.dao.bean.NodeDocument#04364c17-0e99-46c7-aa6d-50722918b6b6]
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2613)
        at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2495)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2822)
        at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
        at com.openkm.dao.HibernateUtil.commit(HibernateUtil.java:315)
        at com.openkm.dao.NodeDocumentDAO.textExtractorHelper(NodeDocumentDAO.java:1199)
        ... 5 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9D\x91\x89\xF0\x9D...' for column 'NDC_TEXT' at row 1
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2696)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2105)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2398)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2316)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2301)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2595)
        ... 18 more
Haciendo referencia a la base de datos, siempre es el mismo archivo:
Code: Select all
docPath=/okm:root/XXXXX/XXXX/YYYYYYYYY/ZZZZZZZ/AAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/Proyecto-Técnico.pdf
Además, (me imagino que viene del mismo error), la cpu está siempre al 100%. Se está creando una entrada como la anterior a cada minuto, supongo que estará intentando indexar el archivo en la base de datos pero da error en el campo 'NDC_TEXT'. Es bastante preocupante este error. También tengo un par de pdfs en la misma carpeta y se pueden previsualizar bien; pero este sale un mensaje de "que no encuentra el archivo temporal".

¿Cómo se puede solucionar?

Otro proceso que también utiliza mucha cpu es la extracción de texto, que me imagino que se puede controlar con la variable:
Code: Select all
managed.text.extraction
¿De que se encarga ese proceso? ¿Es importante que esté activo?

Un saludo y gracias.

Re: Rendimiento OpenKM

PostPosted:Fri Nov 16, 2012 6:10 pm
by jllort
El problema es debido a la codificación del fichero que esta en utf-8 de 16 bits en vez de 8 bits ( una película ... no te cuento el rollo para no aburrirte ). Estamos subiendo ahora el OpenKM 6.2.1 a sourceforge ( en la wiki aun on estan comentados los pasos del upgrade -> paciencia ), pero ya la semana próxima podras actualizarlo ( quiero no equivocarme pero este error ya esta arreglado )

Re: Rendimiento OpenKM

PostPosted:Tue Nov 20, 2012 12:12 pm
by miguelromero
Gracias por la información, muy útil. Añado información de interés.

Log de mysql (versión 5.6) tal y como debe salir:
c:\mysql -uroot -ppassword
mysql> show engines;
Code: Select all
| Engine   | Support | Comment                                                      | Transactions | XA   | Savepoints |
| InnoDB   | DEFAULT | Supports transactions, row-level locking, and foreign keys   | YES          | YES  | YES        |
9 rows in set (0.00 sec)
Cómo salvar la base de Datos en mysql, de forma segura con mysqldump:
Code: Select all
C:\>mysqldump -t -u root -ppassword okmdb > okmdb_backup_solodatos.sql
Warning: Using a password on the command line interface can be insecure.
Code: Select all
C:\>mysqldump -d -u root -ppassword okmdb > okmdb_backup_solotablas.sql
Warning: Using a password on the command line interface can be insecure.
Code: Select all
C:\>mysqldump -u root -ppassword okmdb > okmdb_backup_tablasydatos.sql
Warning: Using a password on the command line interface can be insecure.

Re: Rendimiento OpenKM

PostPosted:Tue Nov 27, 2012 8:28 am
by dix
Hola,

He actualizado a la versión 6.2.1 como se comentó anteriormente para ver si resolvía el bug del text extraction, pero sigo con el problema del "Incorrect string value":
Code: Select all
2012-11-15 10:24:38,960 [Text Extractor Worker] WARN  org.hibernate.util.JDBCExceptionReporter - SQL Error: 1366, SQLState: HY000
2012-11-15 10:24:53,625 [Text Extractor Worker] ERROR org.hibernate.util.JDBCExceptionReporter - Incorrect string value: '\xF0\x9D\x91\x89\xF0\x9D..
.' for column 'NDC_TEXT' at row 1
2012-11-15 10:24:53,625 [Text Extractor Worker] WARN  com.openkm.extractor.TextExtractorWorker - could not update: [com.openkm.dao.bean.NodeDocument
#04364c17-0e99-46c7-aa6d-50722918b6b6]
com.openkm.core.DatabaseException: could not update: [com.openkm.dao.bean.NodeDocument#04364c17-0e99-46c7-aa6d-50722918b6b6]
        at com.openkm.dao.NodeDocumentDAO.textExtractorHelper(NodeDocumentDAO.java:1203)
        at com.openkm.extractor.TextExtractorWorker.processSerial(TextExtractorWorker.java:138)
        at com.openkm.extractor.TextExtractorWorker.processQueue(TextExtractorWorker.java:125)
        at com.openkm.extractor.TextExtractorWorker.run(TextExtractorWorker.java:80)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Caused by: org.hibernate.exception.GenericJDBCException: could not update: [com.openkm.dao.bean.NodeDocument#04364c17-0e99-46c7-aa6d-50722918b6b6]
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2613)
        at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2495)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2822)
        at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
        at com.openkm.dao.HibernateUtil.commit(HibernateUtil.java:315)
        at com.openkm.dao.NodeDocumentDAO.textExtractorHelper(NodeDocumentDAO.java:1199)
        ... 5 more
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9D\x91\x89\xF0\x9D...' for column 'NDC_TEXT' at row 1
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2696)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2105)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2398)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2316)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2301)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2595)
        ... 18 more
He visto que en la configuración hay una variable "managed.text.extraction", ¿Si la pongo a false se detiene el proceso de extracción de texto? De momento, temporalmente, sería una solución ya que el servidor se me pone al 100% todo el tiempo mientras intenta extraer el texto de ese pdf.

Un saludo.

Re: Rendimiento OpenKM

PostPosted:Thu Nov 29, 2012 4:23 pm
by jllort
para este tema dix es mejor abrir otro post.

Re: Rendimiento OpenKM

PostPosted:Fri Nov 30, 2012 10:18 am
by pavila
I think this problem is fixed. Try the tonight night build