MySQL/mariaDB Performance verbessern – query_cache_size anpassen

Manche Webentwickler, vor alem WordPress-Menschen, kennen folgenden Screenshot wahrscheinlich:

Was sagt uns das?

MySql/mariaDB speichern die Abfragen nicht zwischen – es wird also nix gecachet!

Dabei wär das so schön! 😀

MySQL könnte nämlich die Abfragen in einem eigenen Zwischenspeicher lagern und so ähnliche/gleiche Abfragen aus dem Cache fischen, und nicht gegen die Datenbank fahren müssen.

Wie aktiviere ich den MySQL-Cache mit query_cache_size?

Easy!

Einfach folgende Zeilen in die MySQL-Konfig schreiben, den MySQL-Server neu starten und done:

query_cache_type=1

query_cache_size=268435456

query_cache_limit=1048576

Cache und MySQL/MariaDB-Konfig in Plesk aktivieren und anpassen

  1. Zuerst muss man sich mit dem Plesk-Server per SSH verbinden, zb
    $ ssh root@155.666.77.88
  2. In das etc-Verzeichnis gehen:
    $ cd /etc
  3. Status der Datenbank-Konfiguration ansehen – also die Datei my.cnf ansehen:
    $ cat my.cnf

    Das schaut dann ca so aus:

    [mysqld]
    bind-address = ::ffff:127.0.0.1
    local-infile=0
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd[mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid#
    # include all files from the config directory
    #
    !includedir /etc/my.cnf.d

    Wir sehen hier, dass wir MariaDB und nicht mit MySQL arbeiten. Das ist wichtig! Später mehr 🙂

  4. Ändern der my.cnf mit Vim:
    $ vi my.cnf
  5. Dann geht man in den [mysqld]-Bereich. Wichtig, dass man noch nicht in den nächsten „Bereich“ geht. Der nächste Bereich wäre in unserem Beispiel zb [mysqld_safe]. Schreibt man darunter, befindet man sich schon in einer anderen Datenbank-Konfiguration!
  6. Mit dem Befehl
    *i

    kommt man in den Editierbereich und kann neue Zeilen einfügen und Zeilen in die Datei reinkopieren!

  7. Mit Druck auf die Taste ESC beenden wir die Bearbeitung.
  8. Mit dem Befehl
    :x

    speichern wir die Änderungen und beenden Vim

  9. Jetzt muss MySQL neu gestartet werden, das geht zb mit
    # sudo service mysql restart
    1. Oft kommt folgende Fehlermeldung:
      Redirecting to /bin/systemctl restart mysql.service
      Failed to restart mysql.service: Unit not found.
    2. Dann checken wir mal den mysql-Dienst
      # mysl
    3. Gibt es MySQL nicht als Dienst, kommt folgende Meldung
    4. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    5. Ok, also was benutzen wir? Das finden wir so heraus
      # systemctl list-unit-files | grep enabled | grep -iE '(sql|db)'
    6. Wir bekommen zb folgende Ausgabe:
      dbus-org.fedoraproject.FirewallD1.service enabled
      mariadb.service enabled
    7. Wir wissen jetzt also, dass wir MariaDB verwenden! Daher müssen wir diesen Dienst neu starten!
  10. MariaDB neu starten geht über folgende Befehle:
    1. # sudo service mariadb.service restart
    2. Oder auch über folgenden Befehl
      # systemctl restart mariadb
  11. Fertig!

Infos

Screenshots von Webseiten als Bild oder PDF abspeichern

Mit der Veröffentlichung von Chrome-/Chromium-Headless ist es recht einfach, Screenshots zu erstellen.

Früher musste man zb auf PhantomJS zurückgreifen, doch PhantomJS war nicht ganz so zuverlässig.

Wie also Screenshots erstellen?

Screenshots mit Puppeteer (node.js) und Headless-Chrome

Puppeteer kommt vom Chrome-Team und ist eine Node.js Bibliothek.

Puppeteer bietet eine API um einfach mit Chrome-Headless zu sprechen.

Was kann Puppeteer?

  • PDFs und Bilder von Webseiten screenshotten
  • Webscraping, Contentscraping
  • Formulare abschicken
  • Tastatureingaben
  • UI-Testing

Beispiele für die Verwendung findet man auf der GitHub Seite.

Folgendes Tutorial bietet auch einen Startpunkt:

https://tutorialzine.com/2017/08/automating-google-chrome-with-node-js

Screenshots mit Chrome-Headless und Linux-Terminal

Mit einem Terminal lassen sich leicht Screenshots als PDF oder Bild speichern:

chrome --headless --disable-gpu --screenshot https://www.kaoh.at

# Screenshot in Nexus 5x Auflösung
chrome --headless --disable-gpu --screenshot --window-size=412,732 https://www.kaoh.at

Ein guter Artikel und Anleitung dazu findet sich hier:

Echter Headless Chrome (oder Chromium) – Bedien deinen Browser per Kommandozeile, Selenium oder node.js!

Was ist Chrome-Headless?

  • Mit Chrome-Headless kann man den Browser per Kommandozeile/Terminal, Selenium, node.js oder C++ verwenden.
  • Chrome kann daher ressourcenschonend ohne grafische Ausgabe am Server laufen.
  • Man kann per Code Screenshots oder PDFs erstellen, Webseiten debuggen, Formulare ausfüllen und versenden und eben alles machen, was man auch mit der Maus, Tastatur oder per Touch machen kann!

 Gibt es auch Chromium Headless?

Natürlich lässt sich Chromium auch headless starten, und das geht zb im Linux-Terminal so:

$ chromium-browser --headless

Verwendung

Speichern als PDF

$ chromium-browser --headless --disable-gpu --print-to-pdf https://www.kaoh.at

Dieser Befehl erzeugt ein PDF von der angegebenen Seite. Das Ergebnis schaut dann zb so aus:


Es wird also ein PDF mit mehreren Seiten generiert.

Screenshots

chrome --headless --disable-gpu --screenshot https://www.kaoh.at

# Screenshot in Nexus 5x Auflösung
chrome --headless --disable-gpu --screenshot --window-size=412,732 https://www.kaoh.at

Der normale Screenshot liefert folgendes Bild:

Der Screenshot mit der Nexus 5x Auflösung schaut so aus:

Hilfestellungen

Brauche ich die –disable-gpu Flag?

Ja, weil dadurch ein paar Bugs umgangen werden

Wo liegt der Unterschied zu PhantomJS?

PhantomJS verwendet eine ältere Renderengine (eine ältere WebKit-Version).

Viel wichtiger: PhantomJS ist unzuverlässiger, liefert nicht so gute und nachvollziehbare Ergebnisse und macht Probleme mit manchen JavaScript-Dingen.

 

Interessante Links