FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#21
|
||||
|
||||
Bueno, aunque no estamos en La Taberna todavía, invito yo la segunda ronda y la mejor bebida que tengas Emilio para Erick, a quien le pido una disculpa por cualquier agravio que le haya causado con mis intervenciones.
Un abrazo. Al. |
#22
|
|||
|
|||
Cita:
|
#23
|
||||
|
||||
Firebird Rulez!!!
Hola compañeros, antes que nada buenas tardes (aqui en México), y yo invito la ronda de la 'curacion' porque para estas fechas ya estarán en la resaca de las rondas que mencionaron anteriormente .
De antemano comentarles que tengo poca experiencia, pero he tenido la oportunidad de trabajar con MySql, y con Firebird... la verdad me quedo con Firebird, actualmente administro una base de datos de mas de 28 gb, y tengo en ella dos tablas criticas de las cuales una cuenta con mas de 81 millones de registros y la otra con mas de 70 millones de registros (Esto tomando en cuenta que se realizan 'cortes de informacion' y conservo solo la informacion concerniente a años anteriores y el actual, es decir ahorita solo tengo informacion de 2009, 2010 y lo que va del 2011... si dejara la informacion completa, que mantengo en respaldos anteriores, podria facilmente superar los 50Gb), de momento funciona bien, pero si les comento que hay ciertos reportes que se comienzan a tardar mas en devolver respuesta, cabe mencionar que mis consultas, las realizo sobre campos indexados de tipo numerico, siempre pendiente del rendimiento de las mismas; al ritmo que esta creciendo la empresa, me doy cuenta que en relativamente poco tiempo podria tornarse caotico, asi que me veo obligado a cambiar la forma de trabajo. Acudo a los expertos de CD para solicitarles que me iluminen acerca de que ideologia podria adoptar para optimizar el rendimiento de mi BD, tanto para el manejo transaccional, como para el manejo de reportes del nivel administrativo... Utilizo Firebird 2.1 sobre Windows 2003 server, y los clientes corren sobre Windows xp, Vista y 7. Mi base de datos es alimentada por mas de 200 puntos de venta en todo México, no se como vaya a funcionar cuando lleguen a 500 Puntos de venta Lei la informacion que posteo Jachguate sobre como Youtube soluciono ciertos problemas, se que la cantidad de informacion y de consultas por dia no hay ponto de comparacion entre mi 'pequeña' base de datos y la cantidad de informacion que manejan esos gigantes como Youtube, pero me surgen muchas dudas.
La verdad estoy un poco confundido, espero y me puedan aconsejar o recomendar algo para poder tomar un rumbo
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes |
#24
|
|||||
|
|||||
Bueno, bueno... son muchas cosas a tener en cuenta, que habría que estudiar detalladamente en tu caso, ya sabes que cada caso es diferente y es muy difícil acertar dando soluciones generalizadas.
Para empezar, por los reportes que dices que son algo lentos, habría que saber qué hacen esos reportes, qué generador de reportes usas, etc. además de pequeños detalles (y muy importantes), por ejemplo, ¿generas vista previa?, ¿haces doble pasada? (para calcular entre otras cosas el "Página x de y"), etc. Algunso generadores crean unos ficheros temporales en disco que necesitan mucho espacio, cuanto mayor sea el reporte a generar, es conveniente tener espacio más que de sobras y a ser posible en otro disco. Si usas la previsualización será también más lento, obviamente, tiene que generar todas las páginas. En fin, son "truquitos" que hay que ir poniendo en práctica para mejorar el rendimiento. También depende del tipo de informe, supongamos que es una estadística de ventas del año anterior o de meses anteriores, entonces puede que sea interesante tener un pequeño servidor con el backup último y usar esa BD, en lugar de usar el servidor principal, ya que no necesita los datos actuales. Continuando con tus preguntas: Cita:
Cita:
Cita:
Es curioso lo habitual que son comentarios del estilo: "Mi BD va lenta, voy a tener que poner un oracle y un servidor nuevo". ¡¡¡Jod...!!!, pues ponle el nuevo servidor a tu BD actual, verás como lo agradece. Ten por seguro que tu servidor actual, (y no tengo ni idea de cual es), si montas oracle en él, es seguro que va a ir mucho, mucho más lento que firebird. Por lo que necesitarás un servidor más grande sólo para que vaya igual que el actual con firebird. Pues entonces monta firebird en uno más grande (grande=potente). Cita:
Respuesta larga: Por supuesto que SI. Bromas aparte, te garantizo que si instalas linux en tu servidor actual puedes incrementar su rendimiento, como mínimo, un 30% aunque normalmente será más. No has dicho qué servidor tienes, pero es primordial tener uno en condiciones, igual que lo tendrías que instalar si pusieras oracle. Servidores dedicados de 4 u 8 cores, cuanta más memoria ram será mejor, discos de 10000 ó 15000 rpm, por supuesto RAID 5 al menos, un NAS de red también en RAID5 para mantener backups, etc. El sistema debe estar particionado para mantener la BD en una partición, ficheros temporales en otro disco (puede ser el NAS), recuerda que tanto firebird como la mayoría de gestores de informes/reportes usan ficheros temporales y es conveniente que estén en otro disco que no sea el de la BD. No en otra partición (porque sería el mismo disco), sino en otro disco diferente. En mi trabajo, a los clientes más grandes, se les instala de esa manera, grupos de discos RAID5 la BD, otro para los temporales, otro externo para backup, etc. Resumiendo, poner un servidor profesional, y por supuesto, Linux. Si hay algo que une a las empresas que se han citado antes en este hilo, google, wikipedia, etc. es que todos usan sin excepción servidores linux. También sabrás que casi todos los superordenadores más potentes del mundo funcionan con linux, como no puede ser de otra forma. Cita:
En España, la cadena de supermercados Mercadona, que factura más que Erosky y Carrefour juntas, usan Linux desde hace años. Sabrás que Firebird funciona en linux, solaris, hp-ux, macosx, windows, etc. así que no tendrás ningún problema en instalarlo en cualquier ordenador, desde los más pequeños hasta los más grandes superordenadores/mainframes del mundo. Por supuesto, instala en linux la versión classic server o la última versión superclassic. Bueno, si después de todos esos cambios, todavía te resulta lenta... todavía hay mucho que hacer, "afinar" las consultas sql. En mi trabajo nos encontramos hace varios años con las estadísticas acumuladas de varios años que tardaban un poco más de lo recomendable. Se dedicó un tiempo a estudiarlas bien, a depurarlas, afinarlas, simplificarlas, etc. y actualmente esas estadísticas pueden ser de las consultas más rápidas de la gestión, incomprensiblemente Cuando ya tengas tanta información que te sea imposible gestionar con firebird, a pesar de usar un servidor como un camión de grande, entonces puede ser el momento de pasar a.... ¡¡¡postgresql!!!, pero no a oracle. ¿Por qué?, pues porque con postgresql tienes más facilidades que firebird para instalar clusters de servidores y repartir la carga entre ellos, pero en fin, con un servidor "decente" actual, de entre 4 y 16 cores, instalándole unos buenos 16 a 64 GB de ram y un buen sistema de discos en raid... creo que tienes firebird para rato, sin oracle. Sólo con las licencias de oracle ya te puedes comprar un superservidor enormemente monstruoso. En fin, todo esto es información muy generalizada, muy superficial, habría que estudiar cada apartado con detalle para "dar en el centro de la diana"
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#25
|
||||
|
||||
Yo mucho no puedo aportar... Casi se mandó un buen discurso proveniente de sus años de experiencia y eso vale.
Si algunos informes son mas lentos, quizá sea como te han dicho disponer de un servidor con una DB a modo de sólo lectura con los últimos backups para consultar en vez de que sea sobre la DB operativa. Esto podría alijerar la carga, aunque tiene la contra el factor económico y que se deberá llevar a cabo un mejor control de los backups. Otra de las posibilidades, que podrían ayudar a mejorar el rendimiento sobre las consultas para generar informes es aplicar un poco de desnormalización. Es decir, romper un poco las reglas normales y disponer de datos ya preprocesados, calculados, o estimados. Quizá se consiga un aumento del tamaño de la base de datos, pero al menos con estas tablas desnormalizadas, bien pensadas y estudiadas, con sus respectivos índices, etc. Generar un informe que requiera de por dar un ejemplo extremo, 10 joins, 5 group by, 7 order by, 20 coalesce, y 10 Max()s quizá pueda reducirse, siendo optimistas a la mitad. Una solución mágica seguro no hay. Tirar de un lado, invetibalemente tendrá alguna desventaja y repercusión en otro punto. Es el Yin-Yang... ni lo uno, ni lo otro, ni mutuamente excluyentes, ni mutuamente dependientes... es esa sensación rara de que al final damos vueltas en círculos ¿Quieres tirar por el lado de mejorar la base de datos? Te rompe los esquemas y a adaptar de nuevo el sistema para absorver los cambios. ¿Quieres adquirir más poder? Tienes que sacar la billetera... Me hiciste acordar ahora de otra frase: Rapido, Bueno, Barato. Elija 2 cualquiera. Saludos, |
#26
|
||||
|
||||
Daré por sentado que cuando te refieres a informe, te refieres a una CONSULTA SQL con sus JOIN'S y GROUP BY's, ORDER BY's, etc. a como ha dicho Delphi.
Desde mi punto de vista recomendaría: Lo primero, tomando lo dicho por casimiro, es "debuguear" las consultas y ver en que partes puedes optimizarlas. Segundo: Tomando la consideración de Delphius, puedes reducir el uso de JOIN's o GROUP BY's desnormalizando los datos. Por ejemplo, si unes dos tablas para solamente obtener el nombre completo del cliente, puedes evitarte hacer la unión simplemente guardando el nombre del cliente en la tabla de Ventas, por poner un ejemplo. Tercero: Anteriormente dicho por Casi, instala Linux. Cuarto: Aumenta la RAM a la mayor cantidad que puedas y utiliza un disco interno dedicado con la interfaz de conexión más rápida disponible. (Este es el más fácil de los cuatro pero no es una solución a largo plazo). Ahora, no sé si no he entendido el punto o qué, pero veo con recelo eso de partir la DB. No entiendo que rendimiento puedas obtener si partes la DB para luego consultar las distintas partes. Sino me equivoco, desde la versión 2.5 de Firebird puedes hacer conexiones a otras base de datos desde los procedimientos almacenados. Nunca he probado esta funcionalidad, pero estoy casi seguro que tiene su penalidad en el tiempo que se tarta en hacer la conexión. Sin embargo, el tiempo que se tarda en hacer la conexión puede ser relativamente muy enferior al tiempo de espera para generar un informe con todos los datos almacenados en una misma DB. En este caso puedes tomar provecho de esta funcionalidad. Pero esto sería algo que tienes que hacer con mucho cuidado para obtener el máximo rendimiento posible. Desde mi punto de vista primero probaría las cuatro recomendaciones anteriores. Cambiar el motor de base de datos es trabajo. Tienes que estar muy justificado del por qué hacer el cambio. A cómo te han dicho, Oracle no sería recomendable. Mejor utiliza PostgreSQL que trae replicación nativa. Ya Casimiro te explicó el por qué. Por último, estoy seguro que no manejas el nivel de transacciones que tiene Amazon o Youtube. Pero ya que preguntas, tengo entendido que estas empresas utilizan una arquitectura de base de datos llamada "NOSQL". Son motores que están optimizados para escribir y leer rápido. Exceptuando lo básico, en ellos no existe el lenguaje SQL. No es la gran cosa. Simplemente se reducen a obligarte a hacer desnormalización de datos a cómo te ha dicho Delphius y yo lo recojo en el segundo punto. Si quieres la mayor potencia, tienes que dar a cambio el lenguaje SQL. Por último, quiero cerrar diciéndote que Firebird es uno de los motores SQL más rápidos que puedes encontrar. Muy superior a PostgreSQL y Oracle. Su diseño sencillo lo hace uno de los motores más ágiles. Debes de dejar la idea que otro motor te brindará mejor rendimiento, porque créelo, será casi imposible. Saludos. |
#27
|
||||
|
||||
Hola, tremendo y viejo hilo que se ha revivido, un saludo a todos los entrañables amigos que van participando por aquí!!
Estoy algo corto de tiempo y, aunque me gustaría, no he tenido ocasión de leer con detenimiento lo que ya se ha mencionado en respuesta a la pregunta de erickahr. Solo decir que, como bien ha dicho ya mi estimado casimiro es algo aventurado dar respuestas genéricas y por eso, no entraré en mayores detalles. Solo mencionar que si que hay diversas técnicas que se pueden aplicar para encontrar una solución. Como buen DBA (te guste o no, estas llevando ese rol, quizás aparte del de desarrollador y otras cosas), debes aprender a pensar en función de "cuellos de botella". Cuándo una aplicación está respondiendo más lento de lo que esperarías, usualmente es porque hay un cuello de botella... es decir, tenes cierta cantidad de información y cierta "potencia" en el hardware para procesarla... todo el sistema será tan rápido como el punto del proceso por donde más lento pase la información. Cosas a tener en cuenta son muchas, y varían de acuerdo a cómo tenes configurada la base de datos, cómo se realizan las consultas, etc. Hay que empezar por lo básico, como por ejemplo comprender al optimizador del motor y escribir las consultas de manera que los planes sean óptimos, evitar full table scans, etc. Cosas a tener en cuenta son:
Cita:
Un saludo y hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 11-11-2011 a las 19:02:22. |
#28
|
||||
|
||||
Hola, amigo jachguate, es cierto que windows usa la memoria virtual (fichero en el disco duro) para "ampliar" aunque tenga mucha RAM instalada, incluso le sobre, pero eso es un problema de windows, como has dicho.
En linux, no es así, linux usa toda la memoria ram disponible y sólo cuando ya no le queda más remedio, entonces usará la memoria virtual, por lo que siempre está sacando el máximo rendimiento a la ram instalada, y cuanto más tenga, mejor. En los apartados de memoria y cpus, no estoy nada de acuerdo contigo, mejor dicho, o te has confundido o no te he entendido, pero aquí dices: Cita:
Pero no es así en linux con las versiones classicserver ni superclassic, firebird hace uso de todas las cpus instaladas, perfectamente, transparente al usuario, y además lo hace muy bien, aprovechando cada cpu, según su nivel de utilización, si está muy ocupada entonces lanza la consulta por otra cpu. Lo tengo más que probado en mis clientes, observando con 'top' los procesos del servidor según van trabajando los usuarios, y cómo firebird va haciendo peticiones a cpus más ociosas para repartir el trabajo entre todas las cpus. Además no sólo lo digo yo, lo dice la propia documentación de firebird: Cita:
Cita:
El único problema es ahí los discos duros, pero ya digo que hay que montar los más rápidos que se pueda permitir económicamente. En un par de clientes también tenemos instalado red de fibra óptica, por lo que los "cuellos de botella" que mencionas se quedan prácticamente en la eficiencia de las SQLs que hayamos hecho nosotros En cuanto a la memoria, la verdad es que firebird consume muy poco, otra gran ventaja, pero sí necesita un poco por cada conexión abierta, obviamente, no recuerdo la cantidad, pero también es poco, el lunes lo puedo confirmar preguntando a un cliente, pero juraría haber visto en algunas ocasiones más de 6 Gb de ram usadas, eso sí, con varias decenas de conexiones activas. En fin, que al igual que afirmas que con servidores linux la diferencia de rendimiento con windows es bastante grande, también creo que esos "limitantes" que has puesto de cpus y ram, se dan sólo en windows, donde se usa la versión superserver. Y no tiene nada que ver con las versiones classic de firebird, menos todavía en linux.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Notevi fecha: 11-11-2011 a las 20:32:08. |
#29
|
|||||||
|
|||||||
Cita:
Cita:
Lo que yo dije es: Cita:
Procesador. Puede que tengas 16 nucleos, pero que (por estar mal configurada o por haber elegido la edición incorrecta) la base de datos solo pueda sacar provecho de uno (especialmente cierto con firebird). Y nunca quise decir que Firebird no pudiese sacar provecho de todos los núcleos o procesadores instalados. Cuando comparas Firebird con otros motores, sin embargo, no puede dejar de reconocerse que aún tiene limitaciones (la falta de una caché compartida, pro ejemplo), y que no será hasta la versión 3 que esto mejore realmente. Esto tiene que ver también con el punto anterior. Cita:
Cita:
Cita:
Cita:
Yo diría que:
Un saludo, amigo Casimiro y a todos!
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#30
|
||||
|
||||
Seguramente no te entendí bien, mejor ahora, quedará también más claro para otros posibles usuarios
Buen viaje
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#31
|
||||
|
||||
Asi sea
Hola, buen dia a todos compañeros foreros, y antes que nada muchisimas gracias a todos, y especialmente en orden de respuesta.
He leido detenidamente cada punto de sus recomendaciones, de sus consejos, y bueno creo que el primer punto de "Things to do" es montarme un servidor linux, inceramente estoy muy verde en linux, pretendo usar Fedora, aunque ya antes he tenido problemitas con otras distros para levantar el Samba, y tengo ciertas dudas, pero por lo leido vale bastate la pena el cambio, y lo haremos. Como datos adicionales, solo para no dejar cosas en el aire, manejamos un servidor dedicado para los DNS y administracion de los usuarios, permisos y demas; y otro servidor exclusivamente para la BD, el cual no corre aplicaciones, es dedicado, no administra nada, cuenta con 4 cores, se generan Backups diarios a la 1 de la madrugada (cuando el servidor no tiene conexiones activas), y se almacenan en un disco externo de 4TB. Como bien dice Chris con la cuestion de los reportes creo que me explique mal, si me refero al momento de hacer la consulta, ya que una vez con los datos necesarios el RAVE me funciona perfecto, y si, hay algunos reportes 'pesados' en los cuales cambiaré la ideologia y en lugar de sacarlos con Joins, Groups, y demás, se mandarán a una tabla de acumulados para sacar la informacion con un select mas sencillo, aunque en este punto me entra otra pequeña duda...
Cita:
Y bueno por último y no por eso menos importante Jachguate, pues tu dime como por que fecha andas en esta tierra Azteca, y claro que nos ponemos de acuerdo y si alguien más anda por el rumbo, armamos una 'Taberna' en el plano real . Me temo que andaré por aca dando lata mas adelante, porque esto apenas comienza... Saludos y nuevamente Gracias.
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes |
#32
|
||||
|
||||
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#33
|
||||
|
||||
Cita:
El servidor firebird se comunica por el puerto 3050 y él se encarga de hacer las peticiones a la base de datos y de dar las respuestas. Pero nadie, ningún usuario tiene por qué tener acceso a nada del servidor, no hay que compartir nada. Mejor que los usuarios ni sepan dónde está el servidor, usas un alias y listo. Cuando vayas a instalarlo si tienes cualquier duda, pregunta, aunque es un tema que se ha tratado en diversas ocasiones y encontrarás información amplia si usas las búsquedas de clubdelphi.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#34
|
|||
|
|||
Hola, no tengo tanta experiencia en este tema como ustedes pero me enfrento a una situación muy similar y lo que yo puedo aportar es que una consulta SQL específicamente con esas cantidades de registros inevitablemente van hacer lentas por mas optimizadas que se encuentren y la unica opcion seria las tablas de los acumulados, pero ahi es de donde viene otro problema, los TRIGGERS
Cita:
me parece perfecta la idea de poder tener 2 base de datos - una para detalle o para los millones de registros - otra para los acumulados (en donde el proceso de mantenimiento se pueda hacer mucho mas rapido y mas frecuente) pero que pasa con las transacciones????? se puede tener una trasaccion para 2 bases de datos???? Saludos GM |
#35
|
||||
|
||||
Claro, buscar antes de preguntar, y si me imagino que debe ser un tema recurente... pues manos a la obra, y muchas gracias nuevamente Casimiro Notevi y CD
__________________
Nadie puede separar su fe de sus actos, o sus creencias de sus afanes |
#36
|
||||
|
||||
Cita:
Con un backup/restore la BD queda como nueva Con ese servidor que tienes verás como el rendimiento que consigues será bastante importante.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#37
|
||||
|
||||
Cita:
¿saca provecho realmente a los 4? Cita:
Podes configurar el motor de diferentes maneras para graduar la manera y frecuencia de la recolección de este espacio, de manera que sea el óptimo para tu caso particular. Lee el artículo dabase housekeeping, que te dará una panorámica del tema. Te envié un privado, no es que sea secreto... pero prefiero que no haya reporteros en el aeropuerto al llegar, jajajaja
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 11-11-2011 a las 22:51:21. |
#38
|
||||
|
||||
El tema de la "basura", no suele ser problema, en un uso normal ni siquiera se notará. Por eso digo que no es problema, o al menos nunca me he encontrado que sea un problema en ningún caso.
También es cierto que además de los backups diarios, cada semana (cómo mínimo) tenemos programado un backup/restore de la BD (habitualmente los sábados por la noche o domingos, según el cliente), por lo que queda "limpia" para empezar a trabajar de nuevo con ella.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#39
|
||||
|
||||
Cita:
En una aplicación que ha seguido recomendaciones como realizar transacciones cortas, con el menor niveles de aislamiento necesario, no tendría por qué ser problema, pero... he visto casos!! ufff...
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#40
|
||||
|
||||
Pues sí, tan sólo hay que tener un poquito de cuidado con lo que hace
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Google compra más empresas !! ... como lo hacen ? | gluglu | Noticias | 4 | 15-04-2007 00:07:15 |
Adopcion de SOA se duplicara en empresas en los proximos dos años. | Epachsoft | Noticias | 7 | 09-04-2007 05:24:22 |
Listado de empresas | DarKraZY | La Taberna | 0 | 10-11-2006 16:16:50 |
Bloquean el acceso a Internet en empresas españolas | Sasuke_Cub | Noticias | 0 | 17-05-2006 18:46:14 |
Progama para varias empresas | halcon_rojo | Varios | 7 | 06-04-2006 16:13:27 |
|