Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zredukuj zapytania MySQL do jednego zapytania, aby przyspieszyć

Sprawdź, czy obecnie przechwytuję ruch za pomocą dziennika ogólnego:

SELECT @@general_log;   -- 1 if capturing, 0 if not
-- for me, a 1. This means I have been capturing (good for development. Poor idea for Production)

SELECT @@general_log_file; -- file name for General Log if capturing.
-- for me: GeneralLogBegin_20160803_1420.log

SELECT @@datadir; -- the location of the general_log, and other logs
-- for me: C:\ProgramData\MySQL\MySQL Server 5.6\Data\

Teraz wyłączam przechwytywanie dziennika ogólnego poniżej, ponieważ mój przechwytywał:

SET GLOBAL general_log=0; -- stop logging

Przenoszę plik dziennika do katalogu kopii zapasowej, zmieniając jego nazwę na GL_from_20160803_1420_to_20160806_1559

Zawartość i zakres dat i godzin przechwytywania, które zawiera powyższy plik, jest mało niejednoznaczny.

Ustaw nową nazwę przechwytywania pliku dziennika (rozpocznij segment dla nazwy pliku)

SET GLOBAL general_log_file='GeneralLogBegin_20160806_1559.log';
SET GLOBAL general_log=1; -- Start logging again

Uruchom moją aplikację, która łączy się z serwerem, a dziennik ogólny zawiera:

KawałekA:

160806 16:08:37   170 Connect   [email protected] on stackoverflow
          170 Query SHOW VARIABLES
          170 Query SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP())
          170 Query SHOW COLLATION
          170 Query SET NAMES latin1
          170 Query SET character_set_results=NULL
          170 Init DB   my_db_name

Uwaga:być może trzeba będzie to zrobić

mysqladmin -u root -p flush-log

(proszony o podanie hasła), aby opróżnić logi z pamięci podręcznej do pliku. Przy okazji, Wzniosły tekst jest świetny do automatycznego odświeżania aktualnie załadowanego pliku tekstowego. Takich jak plik dziennika.

Więc mój ChunkA powyżej znajduje się końcówka połączenia przychodzącego nowego połączenia. Jest sterowana przez polecenia używanego programu, cokolwiek to może być. To jest przed poleceniami programu, do których jesteś przyzwyczajony i kodujesz. Jeśli ciągle tworzysz nowe połączenia, wykonujesz napisany przez siebie kod i rozłączasz się, to wszystko jest częścią bagażu. Nie masz kontroli nad ich optymalizacją w żaden prosty sposób.

Należy rozważyć wyłączenie dziennika zapytań ogólnych w środowisku produkcyjnym. I tylko włączenie go podczas ustawień środowiska debugowania i testowania. Włączenie go zwiększa niepotrzebne obciążenie stosu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zarządzanie różnicami w formatach dat między PHP i MySQL

  2. Dlaczego dodana funkcja RAND() powoduje przeciążenie MySQL?

  3. Utrwalaj nieprymitywne dane w JPA

  4. Alternatywa dla klauzuli LIKE w Mysql

  5. JDBC nie wykonuje polecenia SHOW DATABASES