sql >> Databasteknik >  >> RDS >> Mysql

Tips för att leverera MySQL-databasprestanda - del ett

Databasens backend påverkar applikationen, vilket sedan kan påverka organisationens prestanda. När detta händer tenderar de ansvariga att vilja ha en snabb lösning. Det finns många olika vägar för att förbättra prestandan i MySQL. Som ett mycket populärt val för många organisationer är det ganska vanligt att hitta en MySQL-installation med standardkonfigurationen. Detta kanske dock inte är lämpligt för din arbetsbelastning och installationsbehov.

I den här bloggen hjälper vi dig att bättre förstå din databas arbetsbelastning och de saker som kan skada den. Kunskap om hur man använder begränsade resurser är avgörande för alla som hanterar databasen, särskilt om du kör ditt produktionssystem på MySQL DB.

För att säkerställa att databasen fungerar som förväntat kommer vi att börja med de kostnadsfria MySQL-övervakningsverktygen. Vi kommer sedan att titta på de relaterade MySQL-parametrarna som du kan justera för att förbättra databasinstansen. Vi kommer också att ta en titt på indexering som en faktor i databasprestandahantering.

För att kunna uppnå optimal användning av hårdvaruresurser kommer vi att ta en titt på kärnoptimering och andra viktiga OS-inställningar. Slutligen kommer vi att undersöka trendiga inställningar baserade på MySQL-replikering och hur det kan undersökas i termer av prestandafördröjning.

Identifiera MySQL-prestandaproblem

Denna analys hjälper dig att bättre förstå din databas hälsa och prestanda. Verktygen nedan kan hjälpa dig att fånga och förstå varje transaktion, så att du kan hålla koll på dess prestanda och resursförbrukning.

PMM (Percona Monitoring and Management)

Percona övervaknings- och hanteringsverktyg är en öppen källkodsamling av verktyg dedikerade till MySQL-, MongoDB- och MariaDB-databaser (på plats eller i molnet). PPM är gratis att använda, och det är baserat på de välkända Grafana och Prometheus tidsserier DB. Det ger en grundlig tidsbaserad analys för MySQL. Den erbjuder förkonfigurerade instrumentpaneler som hjälper dig att förstå din databas arbetsbelastning.

PMM använder en klient/servermodell. Du måste ladda ner och installera både klienten och servern. För servern kan du använda Docker Container. Det är lika enkelt som att dra PMM-serverdockningsbilden, skapa en behållare och starta PMM.

Dra PMM-serverbild

docker pull percona/pmm-server:2

2: Pulling from percona/pmm-server

ab5ef0e58194: Downloading  2.141MB/75.78MB

cbbdeab9a179: Downloading  2.668MB/400.5MB

Skapa PMM-behållare

docker create \

   -v /srv \

   --name pmm-data \

   percona/pmm-server:2 /bin/true

Kör behållare

docker run -d \

   -p 80:80 \

   -p 443:443 \

   --volumes-from pmm-data \

   --name pmm-server \

   --restart always \

   percona/pmm-server:2

Du kan också kontrollera hur det ser ut utan installation. En demo av PMM finns här.

Ett annat verktyg som ingår i PMM-verktygsuppsättningen är Query Analytics (QAN). QAN-verktyget håller koll på exekveringstiden för frågor. Du kan till och med få information om SQL-frågor. Det ger också en historisk bild av de olika parametrarna som är avgörande för optimal prestanda hos en MySQL-databasserver. Detta hjälper ofta att förstå om några ändringar i koden kan skada din prestanda. Till exempel introducerades en ny kod utan din vetskap. En enkel användning skulle vara att visa aktuella SQL-frågor och lyfta fram problem för att hjälpa dig att förbättra din databas prestanda.

PMM erbjuder punkt-i-tid och historisk synlighet av MySQL-databasprestanda. Instrumentpaneler kan anpassas för att möta dina specifika krav. Du kan till och med utöka en viss panel för att hitta den information du vill ha om en tidigare händelse.

Gratis databasövervakning med ClusterControl

ClusterControl tillhandahåller realtidsövervakning av hela databasinfrastrukturen. Den stöder olika databassystem som börjar med MySQL, MariaDB, PerconaDB, MySQL NDB Cluster, Galera Cluster (både Percona och MariaDB), MongoDB, PostgreSQL och TimescaleDB. Övervaknings- och distributionsmodulerna är gratis att använda.

ClusterControl består av flera moduler. I den kostnadsfria ClusterControl Community Edition kan vi använda:

Prestandarådgivare ger specifika råd om hur man hanterar databas- och serverproblem, t.ex. som prestanda, säkerhet, logghantering, konfiguration och kapacitetsplanering. Driftsrapporter kan användas för att säkerställa efterlevnad i hundratals instanser. Övervakning är dock inte förvaltning. ClusterControl har funktioner som säkerhetskopieringshantering, automatisk återställning/failover, distribution/skalning, rullande uppgraderingar, säkerhet/kryptering, lastbalanseringshantering och så vidare.

Övervakning och rådgivare

ClusterControl Community Edition erbjuder gratis databasövervakning som ger en enhetlig bild av alla dina distributioner över datacenter och låter dig borra ner i enskilda noder. I likhet med PMM kan vi hitta instrumentpaneler baserade på realtidsdata. Det är för att veta vad som händer nu, med högupplösta mätvärden för bättre noggrannhet, förkonfigurerade instrumentpaneler och ett brett utbud av aviseringstjänster från tredje part för varning.

Lokala och molnsystem kan övervakas och hanteras från en enda punkt . Intelligenta hälsokontroller implementeras för distribuerade topologier, till exempel detektering av nätverkspartitionering genom att utnyttja lastbalanserarens syn på databasnoderna.

ClusterControl Workload Analytics i en av övervakningskomponenterna som enkelt kan hjälpa dig att spåra dina databasaktiviteter. Det ger klarhet i transaktioner/förfrågningar från applikationer. Prestandaundantag förväntas aldrig, men de förekommer och är lätta att missa i ett hav av data. Outlier discovery kommer att få alla frågor som plötsligt börjar köras mycket långsammare än vanligt. Den spårar det glidande medelvärdet och standardavvikelsen för exekveringstider för frågor och upptäcker/larmar när skillnaden mellan värdet överstiger medelvärdet med två standardavvikelser.

Som vi kan se från bilden nedan kunde vi fånga några frågor som emellan en dag tenderar att ändra exekveringstid vid en specifik tidpunkt.

För att installera ClusterControl klicka här och ladda ner installationsskriptet. Installationsskriptet tar hand om de nödvändiga installationsstegen.

Du bör också kolla in ClusterControl-demon för att se hur den fungerar.

Du kan också få en dockningsbild med ClusterControl.

$ docker pull severalnines/clustercontrol

Följ den här artikeln för mer information om detta.

MySQL-databasindexering

Utan ett index resulterar körning av samma fråga i en genomsökning av varje rad efter nödvändig data. Att skapa ett index på ett fält i en tabell skapar extra datastruktur, vilket är fältvärdet, och en pekare till posten den relaterar till. Med andra ord, indexering ger en genväg, med mycket snabbare frågetider på expansiva tabeller. Utan ett index måste MySQL börja med den första raden och sedan läsa igenom hela tabellen för att hitta de relevanta raderna.

Allmänt sett fungerar indexering bäst på de kolumner som är föremål för WHERE-satserna i dina vanliga frågor.

Tabell kan ha flera index. Att hantera index kommer oundvikligen att kräva att man kan lista de befintliga indexen i en tabell. Syntaxen för att visa ett index är nedan.

För att kontrollera index på MySQL-tabellkörning:

SHOW INDEX FROM table_name;

Eftersom index endast används för att påskynda sökningen efter ett matchande fält i posterna, är det naturligt att indexering av fält som endast används för utdata helt enkelt skulle vara ett slöseri med diskutrymme. En annan bieffekt är att index kan förlänga infognings- eller raderingsoperationer, och bör därför undvikas när de inte behövs.

MySQL Database Swappiness

På servrar där MySQL är den enda tjänsten som körs är det bra att ställa in vm.swapiness =1. Standardinställningen är satt till 60 vilket inte är lämpligt för ett databassystem.

vi /etc/sysctl.conf
vm.swappiness = 1

Transparenta enorma sidor

Om du kör din MySQL på RedHat, se till att Transparent Huge Pages är inaktiverat.

Detta kan kontrolleras med kommandot:

cat /proc/sys/vm/nr_hugepages
0

(0 betyder att genomskinliga enorma sidor är inaktiverade.)

MySQL I/O Scheduler 

I de flesta distributioner bör noop eller deadline I/O-schemaläggare vara aktiverade som standard. För att kontrollera det, kör

cat /sys/block/sdb/queue/scheduler 

MySQL-filsystemalternativ

Det rekommenderas att använda journaliserade filsystem som xfs, ext4 eller btrfs. MySQL fungerar bra med alla dessa och skillnaderna kommer troligen att komma med den maximala filstorleken som stöds.

  • XFS (maximal filsystemstorlek 8EB, maximal filstorlek 8EB)
  • XT4 (maximal filsystemstorlek 8EB, maximal filstorlek 16TB)
  • BTRFS (maximal filsystemstorlek 16EB, maximal filstorlek 16EB)

Standardinställningarna för filsystemet bör gälla.

NTP Deamon

Det är en bra metod att installera NTP-tidsserverdemon på databasservrar. Använd ett av följande systemkommandon.

#Red Hat
yum install ntp
#Debian
sudo apt-get install ntp

Slutsats

Det här är allt för del ett. I nästa artikel kommer vi att fortsätta med MySQL-variabler operativsysteminställningar och användbara frågor för att samla in databasprestandastatus.


  1. Enkelt sätt att exportera en SQL-tabell utan tillgång till servern eller phpMyADMIN

  2. PolyScale.ai – Skala MySQL &PostgreSQL med Global Caching

  3. Hur Scale()-funktionen fungerar i PostgreSQL

  4. Bestäm radstorleken för tabellen