Interviewer: Haben Sie jemals Linux bedient?
Ich: Ja
Interviewer:Welchen Befehl soll ich verwenden, um die Speichernutzung zu überprüfen
Ich:kostenlos oder oben
Interviewer:Können Sie mir sagen, welche Informationen Sie mit dem kostenlosen Befehl sehen können?
Ich:Nun, wie in der Abbildung unten gezeigt, können Sie die Speicher- und Cachenutzung sehen.
Gesamtsumme Speicher
gebrauchter verwendeter Speicher
freier freier Speicher
buff/cache verwendeter Cache
verfügbarer verfügbarer Speicher
Interviewer: Wissen Sie dann, wie man den verwendeten Cache (Buff/Cache) löscht
?Ich: em... Ich weiß nicht
Interviewer: sync; echo 3 > /proc/sys/vm/drop_caches
Können Sie mir dann sagen, ob ich diesen Befehl online ausführen kann?
em…., gehen Sie zurück und warten Sie auf Benachrichtigung
Lassen Sie uns noch einmal über SQL Join sprechenInterviewer:
Okay (wenn Sie es noch einmal falsch beantworten, ist es vorbei) Ergreifen Sie die Gelegenheit.)
innerer Beitritt, innerer Beitritt
Linker Beitritt, Linker Beitritt
Rechter Beitritt, Rechter Beitritt
vollständige Teilnahme
Bildquelle: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html
Interviewer: Wenn Sie während der Projektentwicklung Join-Anweisungen verwenden müssen, wie können Sie die Leistung optimieren und verbessern?
Ich:Es gibt zwei Situationen, eine mit kleiner Datengröße und eine mit großer Datengröße.
Interviewer:Dann?
Ich:Für 1. Wenn die Datengröße klein ist, legen Sie einfach alles in den Speicher und das war's
2. Wenn die Datengröße groß ist
Zusammenfassend lässt sich sagen, dass die Join-Anweisung relativ leistungsintensiv ist, oder?
Ich:Ja
Interviewer:Warum? Ich: Beim Ausführen der Join-Anweisung muss ein Vergleichsprozess stattfinden Interviewer: Ja Ich:Es ist relativ langsam, zwei Tabellen einzeln zu vergleichen, also können wir Lesen Sie die Daten in den beiden Tabellen nacheinander in einen Speicherblock. Am Beispiel der InnoDB-Engine von MySQL können wir den relevanten Speicherbereich mithilfe der folgenden Anweisung definitiv finden join_buffer_size Die Größe wird beeinflusst Die Ausführungsleistung unserer Join-Anweisung. Interviewer: Interviewer: Nehmen Sie als Beispiel die InnoDB-Engine von MySQL InnoDB verwendet eine Seite als grundlegende E/A-Einheit und die Größe jeder Seite beträgt 16 KB. InnoDB erstellt einen Speicher für jede Tabellendaten-.ibd-Datei Ich:Das bedeutet, dass wir so viele Dateien lesen müssen, wie es Tabellen zum Verbinden gibt, häufige Bewegungen sind jedoch immer noch unvermeidlich die Festplatte Interviewer:Das heißt, häufige Bewegungen des Magnetkopfes wirken sich auf die Leistung aus, oder? Ich:Ja, sagen aktuelle Open-Source-Frameworks nicht gerne, dass sie die Leistung erheblich verbessern durch sequentielles Lesen und Schreiben? , wie hbase, kafka Interviewer: Stimmt, glauben Sie, dass Linux dies optimiert hat? Tipp, Sie können den kostenlosen Befehl erneut ausführen, um einen Blick darauf zu werfen Ich: Seltsam wie Der Cache ist mit mehr als 1,2 GB belegt
Bildquelle: https://www.linuxatemyram.com/ Interviewer: Haben Sie jemals darüber nachgedacht buff/ im Cache gespeichert Was Ist? Warum belegt Buff/Cache so viel Speicher und der verfügbare Speicher ist verfügbar und es sind immer noch 1,1 GB vorhanden? Warum kann man den von Buff/Cache belegten Speicher mit zwei Befehlen bereinigen, den belegten Speicher aber nur durch Beenden des Vorgangs freigeben? Interviewer: Ich: Könnte es sein? Ich denke an einen Satz in „CSAPP“ (Deep Understanding of Computer Systems) Das Wesen der Speicherhierarchie besteht darin, dass jede Schicht des Speichergeräts der Cache des Geräts der unteren Schicht ist Für Laien Begrifflich, Das heißt, Linux behandelt den Speicher als Cache der Festplatte Zugehörige Informationen: http://tldp.org/LDP/sag/html/buffer-cache.html Interviewer: Jetzt weiß ich: Wie soll ich die Punktefrage beantworten? Ich: Ich... Interviewer: Gib dir noch eine Chance, was würdest du tun, wenn du gefragt würdest? den Join-Algorithmus implementieren? Ich: Wenn kein Index vorhanden ist, wird die verschachtelte Schleife beendet. Wenn ein Index vorhanden ist, können Sie den Index verwenden, um die Leistung zu verbessern. Interviewer: Zurück zu join_buffer, was ist Ihrer Meinung nach in join_buffer gespeichert? Ich: Während des Scanvorgangs wählt die Datenbank eine Tabelle aus und fügt die Daten ein, die sie zurückgeben und mit anderen Tabellen vergleichen muss .join_buffer Interviewer: Wie gehe ich damit um, wenn ein Index vorhanden ist? Ich: Das ist relativ einfach. Lesen Sie einfach die Indexbäume der beiden Tabellen und vergleichen Sie sie. Lassen Sie mich die indexfreie Verarbeitungsmethode vorstellen Lesen Sie jeweils eine Datenzeile in der Tabelle. Das heißt, wenn die äußere Tabelle 100.000 Datenzeilen und die innere Tabelle 100 Datenzeilen enthält, muss sie 10.000.000 Mal gelesen werden (vorausgesetzt, die Dateien dieser beiden Tabellen). wurden nicht ausgeführt) Das System speichert es im Speicher, wir nennen es eine kalte Datentabelle) Natürlich verwendet jetzt keine Datenbank-Engine diesen Algorithmus (zu langsam)
Blockieren Block, das heißt, es heißt, dass jedes Mal ein Datenelement in den Speicher abgerufen wird, um den E/A-Overhead zu reduzieren MySQL InnoDB verwendet diesen Algorithmus, wenn kein Index verwendet werden kann. Berücksichtigen Sie die folgenden beiden Tabellen t_a und t_b Zusammenfassung Als ich in der Schule war, machte der Datenbanklehrer am liebsten den Datenbankparadigmentest. Erst bei der Arbeit lernte ich, dass alles auf Leistung basieren sollte, wenn es überflüssig sein kann , verwenden Sie es. Wenn es nicht redundant sein kann, schließen Sie es an, wenn es sich wirklich auf die Leistung auswirkt. Versuchen Sie, die Größe Ihres „join_buffer_size“ zu erhöhen, oder wechseln Sie zu einem Solid-State-Laufwerk. Puffer
show variables like '%buffer%'
Ich:
Die meisten Daten in der Datenbank werden irgendwann auf der Festplatte gespeichert und in Form von Dateien gespeichert.
Überprüfung
Den von Buff/Cache belegten Speicher so beiläufig freizugeben bedeutet, dass er nicht wichtig ist und das Löschen keinen Einfluss auf den Betrieb des Systems hat
Join-Algorithmus
Referenzen
„Vertiefendes Verständnis von Computersystemen“ – Kapitel 6 Speicherhierarchie „Experimente und Spaß mit dem Linux-Festplatten-Cache“ Der Autor veranschaulicht anhand mehrerer Beispiele den Einfluss des Festplatten-Caches auf die Programmausführungsleistung "Linux hat meinen RAM gefressen》Erklärung der freien ParameterSo leeren Sie den Puffer/Pagecache (Festplatten-Cache) unter Linux.Erklärung des Unterfragebefehls am Anfang des Artikels
Wie MySQL ausgeführt wird: MySQL von der Wurzel aus verstehenBlock bested-Loop von MariaDB Das offizielle Dokument erklärt die Implementierung des Block-Nested-Loop-Algorithmus
Das obige ist der detaillierte Inhalt vonWarum erfordern Codespezifikationen, dass SQL-Anweisungen nicht zu viele Joins haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!