• Rendimiento OpenKM

  • OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
OpenKM tiene muchas características interesantes, pero es necesario un proceso de configuración para mostrar todo su potencial.
Forum rules: Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
 #19177  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.
 #19193  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 )
 #19194  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.
 #19203  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.
 #19210  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.
 #19225  by jllort
 
Corregido en la wiki
 #19284  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.
 #19295  by jllort
 
Esta semana sin falta actualizaremos la actual versión de la community que resolverá un par de bugs tediosos.
 #19337  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.
 #19362  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 )
 #19422  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.
 #19539  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.
 #19569  by jllort
 
para este tema dix es mejor abrir otro post.
 #19580  by pavila
 
I think this problem is fixed. Try the tonight night build

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.