2009-07-21 30 views
13

Tuvimos una aplicación ejecutándose usando MySql. Descubrimos que MySql no era adecuado para nuestra aplicación después de que descubrimos que no era compatible con parte de la capacidad de GIS que tiene PostGIS (nota: mysql solo admite la búsqueda de SIG con rectángulo de límite mínimo).¿Por qué PostgreSQL es tan lento en Windows?

Así que cambiamos nuestra base de datos 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, me refiero a aproximadamente 4-5 veces más lento.

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

me encontré con algunos comentarios de otros sitios web tales como this:

ACTUALIZACIÓN: Encontramos que la causa de la lentitud se debe a la BLOB que estamos insertando en el DB. Necesitamos poder insertar BLOB a una tasa 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 un BLOB grande a una tasa alta antes?

EDIT: Escuché que PgSql recientemente se transfirió a Windows. ¿Podría ser esta una de las razones?

+1

1. La última versión es 8.4 (lanzada este mes) - actualización, prueba, informe. 2. Este "otros sitios web" es el archivo oficial de la lista de correo del proyecto PostgreSQL. Pero, por otro lado, la publicación a la que se vincula es muy antigua y menciona una versión muy antigua y que ya no es compatible (8.0). –

Respuesta

21

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

Por ejemplo, PostgreSQL usa un proceso por conexión, MySQL usa un hilo. En Unix, esto generalmente no es una diferencia notable en el rendimiento, pero en Windows la creación de nuevos procesos es muy costosa (debido a la falta de la llamada al sistema fork()). Por esta razón, el uso de conexiones persistentes o una agrupación de conexiones es mucho más más importante en Windows cuando se utiliza PostgreSQL.

Otro problema que he visto es que PostgreSQL temprano en Windows se asegurará de forma predeterminada de que sus escrituras estén pasando por la caché de escritura, incluso si está respaldado por baterías. 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 un disco barato. Pero si tiene un caché de escritura respaldado por batería, quiere cambiarlo a fsync normal. Las versiones modernas de PostgreSQL (sin duda 8.3) tendrán como valor predeterminado open_datasync, lo que debería eliminar esta diferencia.

Además, no menciona nada acerca de cómo ha ajustado la configuración de la base de datos.De forma predeterminada, el archivo de configuración incluido con PostgreSQL es muy conservador. Si no ha cambiado nada allí, definitivamente debe echarle un vistazo. Hay algunos consejos de ajuste disponibles en el PostgreSQL wiki.

Para proporcionar más detalles, deberá proporcionar muchos más detalles sobre qué es lo que se ejecuta lentamente y cómo ha ajustado su base de datos. Sugeriría un correo electrónico a la lista de correo pgsql-general.

+0

tienes razón. después de cambiar un poco la configuración predeterminada, se volvió un poco más rápida. – sivabudh

+0

¿Qué aspecto tiene la última versión en Windows para el rendimiento? ¿Su respuesta cambiaría mucho hoy? –

+0

Si bien el rendimiento definitivamente ha mejorado, las diferencias arquitectónicas aún permanecen. –

7

Mientras que 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 primaria o exclusivamente en Unix/Linux/BSD.

Realmente no debería estar ejecutando 8.2 en Windows. En mi opinión, 8.3 fue el primer lanzamiento de Windows que realmente estaba listo para producción; 8.4 es mejor aún. 8.2 está bastante desactualizado de todos modos, y obtendrá varios beneficios si puede actualizarse.

Otra cosa a considerar es el ajuste. PostgreSQL requiere más ajuste que MySQL para lograr un rendimiento óptimo. Es posible que desee considerar publicar en uno de los mailing lists para obtener ayuda con ajustes más que básicos.

+1

PostgreSQL requiere más ajuste que MySQL: en realidad ha sufrido una configuración de uso de memoria muy conservadora por defecto. No sé si todavía es el caso, pero por lo general ese es el primer sospechoso. –

0

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 tu información, esto no está causando tu problema, pero tenlo en cuenta.

Cuestiones relacionadas