Pregunta

Teníamos una aplicación que se ejecutaba usando MySQL. Descubrimos que MySQL no era adecuado para nuestra aplicación después de descubrir que no admitía parte de la capacidad SIG que tiene PostGIS (nota: MySQL solo admite la búsqueda de REG Rectangular mínimas).

Así que cambiamos nuestro DB a PostgreSQL. Luego descubrimos que PostgreSQL 8.2 que se ejecuta en Windows es mucho más lento en comparación con MySQL 5.1. Por más lento, quiero decir aproximadamente 4-5 veces más lento.

¿Por qué es esto? ¿Hay algo en la configuración que necesitamos cambiar?

Encontré algunos comentarios de otros sitios web como este:

ACTUALIZAR: Descubrimos que la causa de la lentitud se debe al blob que estamos insertando en el DB. Necesitamos poder insertar Blob a una velocidad sostenida de 10-15 MB/s. Estamos utilizando Lo_read y Lo_Write de LibPQ para cada blob que estamos insertando/leyendo. ¿Es esa la mejor manera? ¿Alguien ha usado PGSQL para insertar una blob grande a una velocidad alta antes?

EDITAR: Escuché que PGSQL recientemente se portó a Windows. ¿Podría ser esta una de las razones?

¿Fue útil?

Solución

Hay casos en los que PostgreSQL en Windows paga una sobrecarga adicional en comparación con otras soluciones, debido a las compensaciones realizadas cuando lo portamos.

Por ejemplo, PostgreSQL usa un proceso por conexión, MySQL usa un hilo. En UNIX, esto generalmente no es una diferencia de rendimiento notable, pero en Windows crear nuevos procesos es muy costoso (debido a la falta de la llamada del sistema Fork ()). Por esta razón, el uso de conexiones persistentes o un grupo de conexión es mucho Más importante en Windows cuando se usa PostgreSQL.

Otro problema que he visto es que PostgreSQL temprano en Windows, de manera predeterminada, se asegurará de que sus escrituras pasen por el caché de escritura, incluso si está respaldado por la batería. AFAIK, MySQL no hace esto, y afectará en gran medida el rendimiento de escritura. Ahora, esto es realmente necesario si tiene un hardware no seguro, como una unidad barata. Pero si tiene un caché de escritura respaldado por la batería, desea cambiar esto a FSYNC normal. Las versiones modernas de PostgreSQL (sin duda 8.3) predeterminan Open_Datasync, lo que debería eliminar esta diferencia.

También no menciona nada sobre cómo ha ajustado la configuración de la base de datos. Por defecto, el archivo de configuración enviado con PostgreSQL es muy conservador. Si no ha cambiado nada allí, definitivamente debe echarle un vistazo. Hay algunos consejos de ajuste disponibles en el Wiki postgresql.

Para dar más detalles, deberá proporcionar muchos más detalles sobre exactamente lo que funciona lentamente y cómo ha ajustado su base de datos. Sugeriría un correo electrónico a la Lista de correo PGSQL General.

Otros consejos

Si bien el puerto de Windows de PostgreSQL es relativamente reciente, tengo entendido que funciona tan bien como las otras versiones. Pero definitivamente es un puerto; Casi todos los desarrolladores trabajan principalmente o exclusivamente en UNIX/Linux/BSD.

Realmente no debería ejecutar 8.2 en Windows. En mi opinión, 8.3 fue el primer lanzamiento de Windows que estaba realmente listo para la producción; 8.4 es mejor aún. 8.2 está bastante desactualizado de todos modos, y cosecharás varios beneficios si puedes actualizar.

Otra cosa a considerar es la sintonización. PostgreSQL requiere más ajuste que MySQL para lograr un rendimiento óptimo. Es posible que desee considerar publicar en uno de los listas de correo para ayuda con más que ajustes básicos.

PostgreSQL ya es más lento que MySQL hasta cierto punto (en realidad es más rápido cuando tienes una base de datos ridículamente grande). Solo para su información, esto no está causando su problema, pero tenga eso en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top