Material del curso de SQL de la UNACAR 2020
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. # Saber peso de nuestras base de datos
  2. Es importante poder conocer el tamaño que ocupan nuestras base de datos y tablas para poder definir donde hay gran cantidad de datos y por ende hay que realizar optimizacion
  3. *Sintaxis*
  4. ```
  5. SELECT table_schema AS "Base de datos",
  6. ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Tamaño (MB)"
  7. FROM information_schema.TABLES
  8. GROUP BY table_schema;
  9. ```
  10. Saber el peso de una tablas
  11. *Sintaxis*
  12. ```
  13. SELECT table_name AS "Tabla",
  14. ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Tamaño (MB)"
  15. FROM information_schema.TABLES
  16. WHERE table_schema = "base_de_datos"
  17. ORDER BY (data_length + index_length) DESC;
  18. ```
  19. # Mejorar rendimiento de campos que guardan UUID
  20. Lo estandar es guardar campos que guardar uuid en varchar de 32 o incluso en char de 32 pero por alguna razon cuando se guarda en campos de tipo binario el rendimiento mejora considerablemente y si ademas indexamos el campos el rendimiento es hasta 160% mas rapido que si lo guardamos en tipo texto.
  21. # SLOW QUERY
  22. Para Permitirnos ver las querys que estan tomando mucho tiempo en realizarse en el servidor y que por ende nos estan causando problemas de rendimiento lo podremos activar en el archivo de configuracion my.cnf, pero tambien podremos activarlo desde una consulta.
  23. *Sintaxis*
  24. ```
  25. SET GLOBAL slow_query_log = 'ON';
  26. ```
  27. Por defaul cualqueir consulta que dure mas de 10 segunos sera registrada, podemos cambiar ese tiempo usando la siguiente instrucción.
  28. *Sintaxis*
  29. ```
  30. SET GLOBAL long_query_time = TIEMPO;
  31. ```
  32. Para desactivarlo solo tendremos que hacer esta consulta. Cuando
  33. *Sintaxis*
  34. ```
  35. SET GLOBAL slow_query_log = 'OFF';
  36. ```
  37. # Reparación de bases de datos dañadas
  38. Mysql tiene basicamente dos motores de base de datos MyISAM e InnoDB por desgracia la forma de repararlas no es la misma asi que listo rapidamente las dos maneras de realizar estas tareas
  39. ## AMBOS
  40. Tendras que detener el servicio de base de datos dependiedo de la distribucion de SO que tengas.
  41. En esta parte recomiendo en sacar un respaldo de los archivos data de tu base de datos, esto tambien dependera del SO anfitrion de tu servidor de base de datos.
  42. Si quieres verificar toda una base de datos usaras el siguiente comando.
  43. ```
  44. mysqlcheck base_de_datos
  45. ```
  46. Si solo quieres verificar una tabla seria el siguiente:
  47. ```
  48. mysqlcheck base_de_datos tabla
  49. ```
  50. En ambos casos indicara si la tabla contiene algun error si no mostrara ok alado de la tabla.
  51. En caso de requerir reparacion el mismo comando que usaste pero con el parametro -r hara la reparacion quedando d ela siguiente manera:
  52. ```
  53. mysqlcheck -r base_de_datos tabla
  54. ```
  55. ## MyISAM
  56. Para una repacaion mas especializada podras en caso de usar este motor usar la herramienta **myisamchk** la cual trabbaja con archivos asi que tendras que indicar el archivo con extencion .MYI de la tabla que quieres reparar tambien puedes indicarle *.MYI para que lo haga en todas las tablas.
  57. Si el comando logra encontrar alguna tabla con fallo ejecutarias el siguiente comando para repararla.
  58. ```
  59. myisamchk --recover tabla
  60. ```
  61. ## InnoDB
  62. Para el caso de InnoDB se tiene que hacer un cmabio en el archivo de configuración, por supuesto con el servicio de la base de datos apagado.
  63. ```
  64. innodb_force_recovery=4
  65. ```
  66. dentro del archivo de configuracion my.cnf
  67. luego usando **mysqldump** habria que respaldar las base de datos
  68. ```
  69. mysqldump --all-databases --add-drop-database --add-drop-table > bases_de_datos.sql
  70. ```
  71. Despues abria que borra la base de datos y restaurar el respaldo que hicimos, para finalizar comentando de nuevo la configuracion hecha en el archivo my.cnf
  72. ```
  73. mysql < bases_de_datos.sql
  74. ```
  75. ```
  76. #innodb_force_recovery=4
  77. ```
  78. para mas informacion el link de la documentación oficial
  79. [Documentacion Oficial](https://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html)