2024-07-31 22:12:53 +02:00
|
|
|
% !TeX root = ../../thesis.tex
|
2024-01-27 13:37:35 +01:00
|
|
|
|
|
|
|
\chapter{Performance-Untersuchung}
|
|
|
|
\label{ch:performance-checking}
|
|
|
|
|
2024-04-02 22:10:08 +02:00
|
|
|
\section{Auswertung des Systems}
|
|
|
|
\label{sec:performance-checking:system}
|
|
|
|
|
2024-06-02 15:43:11 +02:00
|
|
|
\mytodos{Hier die Auswertung des Produktionsservers unterbringen}
|
2024-01-27 13:37:35 +01:00
|
|
|
|
2024-04-02 22:10:08 +02:00
|
|
|
\section{Statistiken im PostgreSQL auswerten}
|
2024-03-26 22:18:55 +01:00
|
|
|
\label{sec:performance-checking:postgresql-statistics}
|
|
|
|
|
2024-06-02 15:43:11 +02:00
|
|
|
\mytodos{Logs auswerten, am besten vom Produktionsserver. Ebenfalls sollte man die Webseite
|
|
|
|
prüfen, die den Cache von OpenJPE auswerten}
|
2024-01-27 13:37:35 +01:00
|
|
|
|
|
|
|
\section{Überprüfung des PostgreSQL und Servers}
|
2024-03-26 22:18:55 +01:00
|
|
|
\label{sec:performance-checking:postgresql-checking}
|
|
|
|
|
2024-09-12 23:02:22 +02:00
|
|
|
Die einfachste Art die Einstellungen zu prüfen ist, die Abfrage in \ref{lst:postgresql-select-settings} am
|
|
|
|
Datenbankserver auszuführen.
|
|
|
|
|
|
|
|
\begin{lstlisting}[language=SQL,caption={Ermitteln der PostgreSQL Einstellungen},label=lst:postgresql-select-settings]
|
|
|
|
SELECT name AS setting_name
|
|
|
|
, setting AS setting_value
|
|
|
|
, unit AS setting_unit
|
|
|
|
FROM pg_settings
|
|
|
|
WHERE name IN (
|
|
|
|
'shared_buffers'
|
|
|
|
, 'temp_buffers'
|
|
|
|
, 'work_mem'
|
|
|
|
, 'max_connections'
|
|
|
|
, 'maintenance_work_mem'
|
|
|
|
)
|
|
|
|
\end{lstlisting}
|
|
|
|
|
2024-06-02 15:43:11 +02:00
|
|
|
\mytodos{Konfiguration vom Produktionsserver prüfen}
|
|
|
|
|
|
|
|
\section{Einbau und Aktivieren von Performance-Messung}
|
|
|
|
\label{sec:performance-checking:performance-measure}
|
|
|
|
|
2024-08-31 00:09:15 +02:00
|
|
|
Um eine Messung der Performance in der Webseite durchführen zu können, gibt es in \ac{JSF} die Möglichkeit, über eine
|
|
|
|
eigene Implementierung der Klasse \textbf{ViewDeclarationLanguageWrapper} sich in das generieren der Webseite
|
2024-09-10 00:46:35 +02:00
|
|
|
einzuhängen. Hierbei können die Funktionen für das Erstellen, des Bauen und das Rendern der Webseite überschrieben
|
2024-09-01 23:06:28 +02:00
|
|
|
werden. In den überschriebenen Funktionen werden nun Laufzeiten gemessen und die ermittelten Zeiten mit einer Kennung
|
|
|
|
in die Log"=Datei eingetragen. Durch die Kennung, können die Zeiten im Nachgang über ein Script ermittelt und
|
|
|
|
ausgewertet werden.
|
2024-08-31 00:09:15 +02:00
|
|
|
|
|
|
|
Zusätzlich wird noch eine Implementierung der zugehörigen Factory"=Klasse \textbf{ViewDeclarationLanguageFactory}
|
2024-09-01 23:06:28 +02:00
|
|
|
benötigt. Durch diese Factory"=Klasse wird der eigentlichen Wrapper mit der Performance-Messung in die Bearbeitungsschicht
|
|
|
|
eingehängt. Diese Implementierung wird dann noch in der \textbf{faces-config.xml} eingetragen, wie das in
|
2024-09-08 00:33:09 +02:00
|
|
|
\ref{lst:activate-factory} gezeigt wird, damit die Factory durch das System aufgerufen wird.
|
2024-08-31 00:09:15 +02:00
|
|
|
|
|
|
|
\begin{lstlisting}[language=xml,caption={Einbindung Factory},label=lst:activate-factory]
|
|
|
|
<factory>
|
|
|
|
<view-declaration-language-factory>
|
|
|
|
de.wedekind.utils.VdlLoggerFactory
|
|
|
|
</view-declaration-language-factory>
|
|
|
|
</factor>
|
|
|
|
\end{lstlisting}
|
|
|
|
|
2024-09-10 00:46:35 +02:00
|
|
|
Der Quellcode der Klassen ist im Anhang \ref{ap:jsf_performance_measure} zu finden.
|
2024-09-08 00:33:09 +02:00
|
|
|
|
|
|
|
Um die Abfragen im \textit{PostgreSQL} untersuchen zu können, ist es am leichtesten, wenn man die Konfiguration so
|
|
|
|
anpasst, dass alle Abfragen mit entsprechenden Zeitmessungen in die Log"=Datei des ausgegeben werden.
|
2024-09-10 00:46:35 +02:00
|
|
|
Zuerst werden über die Einstellungen unter \ref{lst:postgresql_logfile} die Datei und das Format definiert.
|
2024-09-08 00:33:09 +02:00
|
|
|
|
|
|
|
\begin{lstlisting}[language=yaml,caption={PostgreSQL Dateikonfiguration},label=lst:postgresql_logfile]
|
|
|
|
log_destination = 'jsonlog'
|
|
|
|
logging_collector = on
|
|
|
|
log_directory = 'log'
|
|
|
|
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
|
|
|
|
log_file_mode = 0640
|
|
|
|
log_rotation_size = 100MB
|
|
|
|
\end{lstlisting}
|
|
|
|
|
|
|
|
Über die Konfiguration unter \ref{lst:postgresql_logconf} wird definiert welche Werte mit protokolliert werden. Die
|
|
|
|
wichtigste Einstellung ist \textit{log\_min\_duration\_statement}, diese definiert ab welcher Laufzeit eine Abfrage
|
|
|
|
protokolliert werden soll. Mit dem Wert 0 werden alle Abfragen protokolliert. Alle weitere Einstellungen sind so
|
|
|
|
gesetzt, dass nicht unnötige Abfragen für die spätere Auswertung mit \textit{pgBadger} protokolliert werden.
|
2024-09-12 23:02:22 +02:00
|
|
|
Zusätzlich ist die Einstellung \textit{log\_temp\_files} auf 0 zu setzen. Dadurch werden alle erzeugten temporären
|
|
|
|
Dateien und ihre Größe ebenfalls protokolliert. Diese Dateien entstehen, wenn der temporäre Puffer für die Abfrage
|
|
|
|
nicht ausreicht und die Zwischenergebnisse ausgelagert werden müssen.
|
2024-09-08 00:33:09 +02:00
|
|
|
|
|
|
|
\begin{lstlisting}[language=yaml,caption={PostgreSQL Ausgabekonfiguration},label=lst:postgresql_logconf]
|
|
|
|
log_min_duration_statement = 0
|
|
|
|
log_autovacuum_min_duration = 10
|
|
|
|
log_checkpoints = off
|
|
|
|
log_connections = on
|
|
|
|
log_disconnections = on
|
|
|
|
log_disconnections = on
|
|
|
|
log_duration = off
|
|
|
|
log_error_verbosity = default
|
|
|
|
log_hostname = on
|
|
|
|
log_lock_waits = on
|
|
|
|
log_statement = 'none'
|
2024-09-12 23:02:22 +02:00
|
|
|
log_temp_files = 0
|
2024-09-08 00:33:09 +02:00
|
|
|
log_timezone = 'Europe/Berlin'
|
|
|
|
\end{lstlisting}
|