English version
German version
Spanish version
French version
Italian version
Portuguese / Brazilian version
Dutch version
Greek version
Russian version
Japanese version
Korean version
Simplified Chinese version
Traditional Chinese version
Hindi version
Czech version
Slovak version
Bulgarian version
 

40/sec a 500/sec

Software RSS Feed





Introducción

¿Sorprendido, por el título? bien, éste es un viaje de cómo agrietamos el jinx del scalability de la dirección los 40 expedientes pobres por segundo a 500 expedientes por segundo. Guárdese, la mayoría de los problemas que hicimos frente eran derecho delanteros, así que la gente experimentada pudo encontrar esto superfluo.
Contenido

¿* 1.0 donde estábamos?

1.1 La memoria golpea el cielo
1.2 tarifa de proceso baja
1.3 Pérdida de los datos:- (
1.4 Mysql nos tira hacia abajo
1.5 Cliente Lento Del Web

* camino 2.0 al nirvana

2.1 ¡Memoria que controla!
2.2 Aerodinamizar tarifa de proceso
2.3 ¿Qué uh-uh de la pérdida de los datos?
2.4 Preguntas del Sql Que templan
2.5 Esquema de la base de datos que templa
2.5 ¡Mysql nos ayuda a avanzar!
2.6 Más rápidamente... más rápidamente cliente del Web

* fondo 3.0

¿Dónde estábamos?

Teníamos inicialmente un sistema que podría escalar solamente hasta que 40 expedientes /sec. ¿Podría incluso recordar la discusión, sobre "qué debo ser el índice ideal de expedientes? ". Finalmente decidíamos que 40/sec era la tarifa ideal para un solo cortafuego. Tan cuando tenemos que salir, atleast necesitamos apoyar 3 cortafuegos. Por lo tanto decidíamos que 120/sec sería la tarifa ideal. De acuerdo con los datos de nuestro competitor(s) vinimos a la conclusión que, ellos podría apoyar alrededor de 240/sec. ¡Pensamos que era aceptable! pues era nuestro primer lanzamiento. Porque todos los competidores hablaron del número de cortafuegos él apoyó pero no en la tarifa.

La memoria golpea el cielo

¡Nuestra memoria golpeaba siempre el cielo incluso en 512MB! ¡(excepción de OutOfMemory) culpamos depositar inmemory del cewolf(s) del images.But generado que no podríamos escaparnos para largo! ¡Ninguna materia si conectamos a cliente o no nosotros golpeaba el cielo en un par del máximo de los días 3-4 días completamente! Interesante, esto era reproductivo cuando enviamos datos en el rates(then) muy alto, alrededor de 50/sec. Usted lo conjeturaba la derecha, un almacenador intermediario ilimitado que crece hasta que golpea la azotea.

Tarifa de proceso baja

Procesábamos expedientes en el índice de 40/sec. Utilizábamos la actualización a granel del dataobject(s). ¡Pero no dio la velocidad prevista! ¡Debido a esto comenzamos a amontonar datos en memoria dando por resultado memoria de la valla publicitaria!

Pérdida De los Datos:- (

A una velocidad muy elevada faltábamos mucho un packet(s). Nos parecíamos tener poca pérdida de los datos, pero ésa dio lugar a un cerdo de la memoria. En alguno que pellizcaba para limitar el tamaño de almacenador intermediario comenzamos a tener una pérdida constante de los datos de el cerca de 20% en las tarifas muy altas.

Mysql nos tira hacia abajo

Hacíamos frente a una época resistente en que importamos un fichero de diario alrededor de 140MB. Mysql comenzó a hog, el arrastre comenzado máquina y a veces él responding.Above parado uniforme todo, comenzamos a conseguir el timeout(s) del deadlock(s) y de la transacción. Cuál redujo eventual la sensibilidad del sistema.

Cliente Lento Del Web

Aquí culpamos otra vez el número de gráficos que demostramos en una página como el embotellamiento, no haciendo caso del hecho de que había muchos otros factores que tiraban hacia abajo el sistema. Las páginas llevaban 30 segundos la carga para una página con 6-8 gráficos y tablas después de 4 días en el centro de datos del Internet.

Camino Al Nirvana

¡Memoria Que controla!

Intentamos poner un límite en el tamaño de almacenador intermediario de 10.000, pero no dura para largo. El defecto principal en el diseño era que asumimos que el almacenador intermediario de alrededor 10000 sería suficiente, es decir seríamos expedientes de proceso antes de que el almacenador intermediario de 10.1000 alcances. En línea con el principio "que algo puede ir mal él irá mal!" fue mal. Comenzamos a soltar datos. Subsesquently que decidíamos ir con depositar basado del fichero "plano", en donde los datos fueron descargados en el fichero "plano" y cargados en la base de datos usando los "datos de la carga infile". Ésta era muchas veces más rápidamente que un relleno a granel vía conductor de la base de datos que usted puede ser que también desee a la comprobación algunas optimizaciones posibles con los datos de la carga infile. Esto fijó nuestro problema de aumentar el tamaño de almacenador intermediario de los expedientes crudos.

El segundo problema que hicimos frente era el aumento del cewolf(s) en la memoria que depositaba el mecanismo. ¡Por defecto utilizó "TransientSessionStorage" que deposita los objetos de la imagen en memoria, allí parecido para ser un cierto problema en la limpieza encima de los objetos, incluso después los rerferences fueran perdidos! Escribimos tan una puesta en práctica pequeña de "FileStorage" que almacenan los objetos de la imagen en el archivo local. Y sea servido a medida que la petición viene adentro. Por otra parte, también implmentated un mecanismo de la limpieza a las imágenes añejas del images(de la limpieza más viejas que 10mins).

Otro aspecto interesante que encontramos aquí era que el colector de la basura tenía la prioridad más baja así que los objetos creados para cada los expedientes, fue limpiado apenas para arriba. Aquí está una poca matemáticas para explicar la magnitud del problema. Siempre que recibamos un expediente del registro que creamos el objects(hashmap ~20, tokenized las secuencias etc) tan en el índice de 500/sec para 1 segundo, el número de objetos era 10,000(20*500*1). debido al colector de proceso pesado de la basura nunca tenía una ocasión a la limpieza los objetos. Tan todo lo que tuvimos que hacer era un pellizco retorcido de menor importancia, nosotros acaba de asignar la "falta de información" a las referencias del objeto. ¡Voila! el colector de la basura era nunca torturado conjetura; -)

Aerodinamizar tarifa de proceso

¡La tarifa de proceso estaba en un 40/sec pobre que significa que podríamos soportar apenas incluso un arrebato pequeño de los expedientes del registro! El control de la memoria nos dio un cierto consuelo, but que el problema real estaba con el uso de los filtros alertas sobre los expedientes. Teníamos alrededor 20 características para cada expediente, nosotros utilizamos buscar para todas las características. ¡Cambiamos la puesta en práctica al fósforo para esas características que teníamos criterios para! Por otra parte, también teníamos un escape de la memoria en el proceso alerta del filtro. Mantuvimos una coleta que creció por siempre. ¡Tuvimos que mantener tan un objeto del fichero "plano" que descargaba para evitar el re-ana'lisis de expedientes para formar objetos! Por otra parte, hacíamos el acto de buscar para un fósforo para cada uno de la característica incluso cuando no hicimos ningún criterio alerta configurar.

¿Qué uh-uh de la pérdida de los datos?

¡Una vez que fijáramos la memoria publica en la recepción de los datos es decir que descargan en fichero "plano", nosotros nunca perdió datos! Además de ése tuvimos que quitar un par de índices indeseados en la tabla cruda para evitar los gastos indirectos mientras que descargaban datos. Nosotros índices del hadd para las columnas que podrían tener un máximo de 3 valores posibles. Cuál hizo el relleno más lento y no era realmente útil.

Preguntas del Sql Que templan

Sus preguntas son sus llaves al funcionamiento. Una vez que usted comience a clavar las ediciones, usted verá que usted puede ser que incluso tenga que de-normalizar las tablas. ¡Lo hicimos! Aquí están algunos de los learnings dominantes:

* El uso "analiza la tabla" para identificar cómo la pregunta del mysql trabaja. Esto le dará la penetración alrededor porqué la pregunta es lenta, es decir si está utilizando los índices correctos, si está utilizando una exploración etc del nivel de la tabla.

* Nunca filas de la cancelación cuando usted se ocupa de datos enormes en la orden de 50.000 expedientes en una sola tabla. Siempre intento para hacer una "tabla de la gota" tanto como sea posible. ¡Si no es posible, reajuste su esquema, que es su solamente salida!

* Evite el join(s) indeseado, no están asustado de-normalizar (es decir duplique los valores de la columna) evitan el join(s) tanto como sea posible, tienden para tirar hacia abajo su pregunta. Una ventaja ocultada es el hecho de que imponen simplicidad en sus preguntas.

* Si usted se está ocupando de datos a granel, el uso "datos de la carga infile" allí es siempre dos opciones aquí, local y telecontrol. Utilice a local si el mysql y el uso están en el mismo telecontrol del uso de la máquina de otra manera.

* Intente partir sus preguntas complejas en dos o tres preguntas más simples. Las ventajas en este acercamiento son que el recurso del mysql no hogged para arriba para el proceso entero. Tienda para utilizar las tablas temporales. En vez de usar una sola pregunta que atraviesa a través de 5-6 tabula.

* Cuando usted se ocupa de la cantidad enorme de datos, es decir usted desea a los proces dice 50.000 expedientes o más en un solo intento de la pregunta usando límite al proceso de hornada los expedientes. Esto le ayudará a escalar el sistema a las nuevas alturas

* Utilice siempre un transaction(s) más pequeño en vez los grandes es decir que atraviesan a través de las tablas de "n". Esto traba para arriba los recursos del mysql, que pudieron causar la lentitud del sistema incluso para las preguntas simples

* Utilice el join(s) en columnas con índices o llaves extranjeras

* Asegúrese de que el preguntas del interfaz utilizador tengan criterios o limítese.

* También asegúrese de que la columna de los criterios esté puesta en un índice

* No tenga el valor numérico en criterios del sql dentro de cotizaciones, porque el mysql hace un tipo molde

* utilice las tablas temporales tanto como sea posible, y cáigalas...

* El relleno de select/delete es una cerradura doble de la tabla... esté enterado...

* Tome el cuidado que usted no duele la base de datos del mysql con la frecuencia de sus actualizaciones a la base de datos. Teníamos un caso típico que descargábamos a la base de datos después de que cada 300 expedientes. Tan cuando comenzamos a probar para 500/sec comenzamos a ver que el mysql nos arrastraba literalmente abajo. Ése es cuando realizamos que el typicall en el índice de 500/sec allí es "una petición infile de los datos de la carga" cada segundo a la base de datos del mysql. Tuvimos que cambiar tan para descargar los expedientes después de 3 minutos más bien que 300 expedientes.

Esquema de la base de datos que templa

Cuando usted se ocupa de la cantidad enorme de datos, asegúrese siempre de que usted repartiera sus datos. Ése es su camino al scalability. Una sola tabla con los lakhs de la opinión 10 puede nunca escalar. Cuando usted se prepone ejecutar las preguntas para los informes. Tenga siempre dos niveles de tablas, de las tablas crudas una para los datos reales y de otro sistema para el tables(del informe las tablas que los interfaces utilizador preguntan encendido!) Asegúrese siempre de que los datos sobre sus tablas del informe nunca crezcan más allá de un límite. Encajónele están planeando utilizar el oráculo, usted puede probar repartir basado en criterios. Pero desafortunadamente el mysql no apoya eso. Tendremos que tan hacer eso. Mantenga una tabla del meta en la cual usted tenga la información de jefe es decir que tabulan para buscar, para un sistema de tiempo dado de los criterios normalmente.

* Tuvimos que caminar a través de nuestro esquema de la base de datos y agregamos para agregar algunos índices, suprimimos alguno e incluso el column(s) duplicado para quitar el join(s) costoso.

* El ir adelante realizamos eso que tenía las tablas crudas como InnoDB era realmente gastos indirectos al sistema, así que nos lo cambiamos a MyISAM

* También fuimos al grado de reducir el número de filas en las tablas estáticas implicadas adentro ensamblamos

* La FALTA DE INFORMACIÓN en tablas de la base de datos se parece hacer un cierto funcionamiento golpear, así que evítelas

* No tenga índices para las columnas que ha permitido valores de 2-3

* Cheque cruzado la necesidad de cada índice en su tabla, son costosos. Si las tablas son de cheque del doble de InnoDB entonces su necesidad. Porque las tablas de InnoDB se parecen tomar alrededor 10-15 mide el tiempo del tamaño de las tablas de MyISAM.

* Utilice MyISAM siempre que haya una mayoría de, cualquiera una (seleccione o relleno) de preguntas. Si el relleno y el selectos van a ser más entonces es mejor tenerlo como InnoDB

¡Mysql nos ayuda a avanzar!

Temple su servidor del mysql solamente después de usted consonancia fina su queries/schemas y su código. Solamente entonces usted puede ver una mejora perceptible en funcionamiento. Aquí están algunos de los parámetros que vienen en práctico:

* Utilice el tamaño de la piscina de almacenador intermediario que permitirá a sus preguntas ejecutar más rápidamente -- innodb_buffer_pool_size=64M para InnoDB y utilizar -- key-bufer-size=32M para MyISAM

* Las preguntas simples uniformes comenzaron a tomar más tiempo que esperado. ¡Nos desconcertaron realmente! Realizamos que el mysql se parece cargar el índice de cualquier tabla que comience a insertar encendido. Qué sucedió típicamente estaba tan, cualquier pregunta simple a una tabla con 5-10 filas tomó alrededor 1-2 secs. En análisis adicional encontramos que momentos antes de la pregunta simple, "infile de los datos de la carga" sucedida. Esto desapareció cuando cambiamos las tablas crudas al tipo de MyISAM, porque el tamaño de almacenador intermediario para el innodb y MyISAM son dos diversas configuraciones.

para parámetros más configurables vea aquí.

Extremidad: comience su mysql para comenzar con la opción siguiente -- el registro-error esto permitirá el registro de errores

Más rápidamente... más rápidamente cliente del Web

¡El interfaz utilizador es la llave a cualquier producto, especialmente la velocidad percibida de la página es más importante! Aquí está una lista de las soluciones y de los learnings que pudieron venir en práctico:

* Si sus datos no van a cambiar para la opinión 3-5 minutos, es mejor depositar sus páginas del lado del cliente

* Tienda para utilizar los gráficos internos etc. de Iframe(s)for que dan un fastness percibido a sus páginas. Todavía mejore el uso el mecanismo contento basado Javascript del cargamento. Éste es algo que usted puede ser que desee para hacer cuando usted tiene gráficos de la opinión 3+ en la misma página.

* El Internet Explorer exhibe la página entera solamente cuando todo el contenido se recibe del servidor. Es tan recomendable utilizar iframes o el Javascript para el cargamento contento.

* Nunca utilice las entradas de multiple/duplicate del archivo del CSS en el HTML page. ¡El Internet Explorer tiende para cargar cada archivo del CSS como entrada separada y se aplica en la página completa!

¡La línea de fondo sus preguntas y esquema hace el sistema más lento! ¡Fíjelos primero y en seguida culparon la base de datos!

Vea También

* Alto Rendimiento Mysql

* Funcionamiento De la Pregunta

* Explique La Pregunta

* Preguntas Óptimas

* El Templar De InnoDB

* Mysql Que templa

Categorías: Analizador Del Cortafuego | El funcionamiento inclina esta página era el Last modified 18:00, el 31 de agosto de 2005.

- Ramesh-

Artículo Fuente: Messaggiamo.Com

Translation by Google Translator





Related:

» Seo Elite: New Seo Software!
» AntiSpywareBOT
» Reverse Mobile
» Error Nuker


Webmaster obtener el código html
Añadir este artículo a su sitio web ahora!

Webmaster Envíe sus artículos
No es necesario que se registre! Completa el formulario y su artículo está en el Messaggiamo.Com Directorio!

Add to Google RSS Feed See our mobile site See our desktop site Follow us on Twitter!

Envíe sus artículos a Messaggiamo.Com Directorio

Categorías


Derechos de autor 2006-2011 Messaggiamo.Com - Mapa del sitio - Privacy - Webmaster enviar sus artículos a Messaggiamo.Com Directorio [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu