Dienstag, Juni 12, 2018

dbms_random zur Generierung (ziemlich) eindeutiger Werte

Jonathan Lewis weist in seinem jüngsten Artikel darauf hin, dass man die Länge von Strings, die man per dbms_random.string('U', n) generiert, mit Bedacht wählen sollte: bereits ein relativ niedriger Wert für liefert eine sehr große Zahl unterschiedlicher Permutationen: für 6 Zeichen sind es bereits über 300 Millionen Kombinationen, so dass sich daraus für den im Artikel (und im zugrunde liegenden OTN-Fall) für eine 100M rows Tabelle ein Wert mit sehr seltenen Wiederholungen ergeben würde. Bei 8 Zeichen ist die Wahrscheinlichkeit der Wiederholung dann schon sehr gering. Umgekehrt ist die Erstellung kürzerer dbms_random-Strings weitaus günstiger: für 20 Zeichen ergeben sich im vorgestellten Beispiel 1m 55 sec, während der String mit 6 Zeichen (und mit per rpad() angehängtem beliebigen Zeichen) in 41 sec erzeugt werden konnte. Die Ursache für diesen Unterschied ist, dass Oracle jedes einzelne Zeichen durch die Zufallsfunktion erzeugt, so dass ein um Faktor 3 längerer String auch in etwa eine um Faktor 3 erhöhte CPU-Nutzung bedeutet. Wo kürzere Strings genügen, kann man dem System demnach einige Arbeit sparen.

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.