postgresql "größe temporärer dateien"
<p>ich habe daten in eine neue datenbank importiert (ca. 600 m zeilen zeitstempel, ganzzahl, doppel). ich habe dann einige indizes erstellt und versucht, einige spalten zu ändern (einige probleme mit speicherplatz). die datenbank wird gesaugt.</p><p>jetzt sagt mir pgadmin iii, dass die "<strong> größe der temporären dateien </strong>" 50g ~ + beträgt.</p><ol> <li>was sind diese temporären dateien? sind diese wie das sql server-transaktionsprotokoll?</li> <li>wie kann ich sie loswerden? es scheint, dass die datenbank viel größer ist als sie sollte (die gesamtgröße der datenbank beträgt 91 gb).</li> </ol><p>verwenden von <em> posgres 9.4.1</em> auf einem <em> windows 2012 server.</em></p><p>ein screenshot der registerkarte datenbankstatistik:</p><p> <a href="https://i.stack.imgur.com/xrrzc.png">(<img src="https://i.stack.imgur.com/xrrzc.png" alt="a screenshot of the database statistics tab"></a> </p>
<p>ich habe nichts in der pgadmin-dokumentation gefunden, aber das <a href="https://github.com/postgres/pgadmin3/blob/master/pgadmin/schema/pgdatabase.cpp">quellcode enthüllt</a> die abfrage hinter diesen einträgen (hinzugefügt für postgres 9.2+):</p><p>es läuft darauf hinaus:</p><pre><code>select temp\_files as "temporary files" , temp\_bytes as "size of temporary files" from pg\_stat\_database db; </code></pre><p>und das <a href="http://www.postgresql.org/docs/current/static/monitoring-stats.html#pg-stat-database-view">postgres-handbuch enthält details zu <code>pg\_stat\_database</code></a> :</p><blockquote> <p><code>tmp\_files</code> <code>bigint</code> anzahl der temporären dateien, die durch abfragen in dieser datenbank erstellt wurden. alle temporären dateien werden gezählt, unabhängig davon, warum die temporäre datei erstellt wurde (z. b. sortieren oder hashing), und unabhängig von der einstellung <a href="http://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-temp-files">log\_temp\_files</a> .</p> <p><code>temp\_bytes</code> <code>bigint</code> gesamtmenge der daten, die durch abfragen in dieser datenbank in temporäre dateien geschrieben wurden. alle temporären dateien werden gezählt, unabhängig davon, warum die temporäre datei erstellt wurde, und unabhängig von der einstellung <a href="http://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-temp-files">log\_temp\_files</a> .</p> </blockquote><p>beachten sie, dass diese werte <strong> <em> nicht</em> </strong> zur größe ihrer datenbank beitragen. aber sie zeigen an, dass ihre einstellung für <a href="http://www.postgresql.org/docs/current/interactive/runtime-config-resource.html#runtime-config-resource-memory"><strong> <code>work\_mem</code> </strong></a> ist möglicherweise zu niedrig, so dass viele sortiervorgänge auf die festplatte übertragen werden (was <em> sehr</em> langsam ist, verglichen mit nur ram).</p><p>verbunden:</p><ul> <li> <a href="https://dba.stackexchange.com/questions/48630/optimize-simple-query-using-order-by-date-and-text/48633#48633">optimieren sie die einfache abfrage mit order by datum und text</a> </li> </ul><p>so komprimieren sie die größe ihrer datenbank:</p><ul> <li> <a href="https://dba.stackexchange.com/questions/37028/vacuum-returning-disk-space-to-operating-system/37032#37032">vacuum gibt speicherplatz an das betriebssystem zurück</a> </li> </ul><p>so messen sie die größe:</p><ul> <li> <a href="https://dba.stackexchange.com/questions/23879/measure-the-size-of-a-postgresql-table-row/23933#23933">messen sie die größe einer postgresql-tabellenzeile</a> </li> </ul><p>nebenbei: <a href="http://www.postgresql.org/docs/current/interactive/wal-configuration.html"><strong> [~ # ~] wal [~ # ~] </strong> (write ahead log)</a> wäre in postgres für das äquivalent transaktionsprotokoll in sql server. schöne erklärung in dieser verwandten antwort auf so:</p><ul> <li> <a href="https://stackoverflow.com/q/14181180/939860">warum verwenden sql-datenbanken ein write-ahead-protokoll über ein befehlsprotokoll?</a> </li> </ul>
Ist normal, daß kurz nach dem Speichern noch für einige Zeit eine Temporärdatei mit Tildesymbol im Explorer sichtbar ist. Meistens auch erkennbar am Dateinamen mit WRD. Bevor weitergearbeitet wird mit demselben Word-Datei, muß immer erst abgewartet werden, bis diese Temp verschwindet. Je nach Größe und Systemperformance dauert das schon mal etwas länger. Bei WinME und Word6/95 bis zu 3 Minuten, je nach Größe des "Worddocs". Bleiben diese Temporärdateien aber dauerhaft im Explorer sichtbar, ist die Originaldatei eventuell nicht im selben Format gespeichert oder teilweise beschädigt. Das mache ich oft. Word fragt ja, ob Datei im aktuellen Format oder einem anderen, z.B. Word6/95 gespeichert werden soll. Wird das bejaht (aktuelles Format), sind die Temporärdateien schnell verschwunden.
Das ist dann die Kompatibilität der verschiedenen Word-Versionen. Welche Word-Version wird benutzt? Habe hier noch Word der Office Suite 2000 (registriert/lizensiert) in Benutzung. Die meisten sind heute aus Thermopapier und halten, falls sie offen liegen, nur 3 Wochen manchmal. Man muß sie verschlossen und "dunkel" aufbewahren, und wichtige kopiere ich schnellstens. Neuerdings hat meine Bank, die Sparkasse auch die Kontoauszüge auf so einem Papier. Ich war sauer darüber und habe mir die Dauer der Dokumente bestätigen lassen, schriftlich, 8 Jahre auf jeden FAll sagt man dort. Auf der Rückseite sind Anweisungen für die Aufbewahrung zu lesen. Die Banken nehmen immer höhere Gebühren, aber der Kunde sieht sich immer wieder neuen Umständen gegenüber, notfalls müssen die Belege auch wieder fotokopiert werden, mal abwarten, das wären dann zusätzliche Kosten mal wieder. Der interne Speicher hat hier eine Größe von 4GB. Ich sehe nicht, wie Sie schneller als mit SqlBulkCopy ausführen können. Auf unserem Projekt können wir 250K Zeilen in ungefähr 3 Minuten importieren, also scheint Ihre Rate ungefähr richtig zu sein. 

 Ich denke nicht, dass es parallel dazu helfen würde, selbst wenn es technisch möglich wäre. Wir führen nur jeweils einen Import aus, ansonsten beginnt SQL Azure damit, unsere Anforderungen zu terminieren. 

 In der Tat ist es manchmal nicht möglich, eine große Group-by-Abfrage gleichzeitig mit dem Import auszuführen. SQL Azure führt eine Menge Arbeit aus, um die Servicequalität zu gewährleisten. Dazu gehört auch das Zeitlimit für Anforderungen, die zu lange dauern, zu viele Ressourcen usw 

 Wenn Sie also mehrere große Masseneinsätze zur selben Zeit machen, werden Sie *wahrscheinlich* eine Auszeit haben. da hat dir jemand schauermärchen über externe festplatten aufgetischt. alle kleineren, externen (2,5 zoll) festplatten (egal ob mechanisch oder SSD) werden ausschließlich über den usb-port mit strom versorgt.


große 3,5 zoll platten in großen gehäusen erfordern für ihren betrieb mehr power, als usb liefern kann, daher haben diese eine eigene stromversorgung.


beides hat aber nichts mit der daten-verbindung zu tun. sie ist ständig aktiv, kann sich aber bei "nichtgebrauch" im latenten standby-betrieb befinden, ohne dass es deinen rechner, bzw. die konsole oder ein spiel stört. falls das spiel (oder das programm) das nachladen von daten erfordert, sollte eine leistungsfähige konsole oder ein moderner pc/notebook das ohne unterbrechung der laufenden anwendung im hintergrund erledigen.


bei einem pc ist es sogar empfehlenswert, trotz "plug & play" funktion, die externe festplatte vor dem abstöpseln datenmäßig zu trennen, weil ggf. trotz standby ein paar bytes verloren gehen können. Im wesentlichen kommen zwei Ursachen für dein Problem in Frage. Die este Ursache ist, das deine
Festplatte kaputt ist (Datenträgerfehler), da Festplatten sehr empfindlich sind und externe Festplatten sind nicht sonderlich geschützt.
Als zweite Möglichkeit kommt in betracht, das es zu einem Fehler in der Struktur deiner Festplatte gekommen ist. Dabei kann es zu Schäden an der Partitionstabelle, der Master File Table, oder
einfach eines Verzeichniseintrags (Ordner) gekommen sein, was sich im allgemeinen reparieren lässt. Dazu brauchst du aber ein Programm zu Datenrettung/wiederherstellung wie
z.B. PC Inspector File Recovery.


<http://www.chip.de/downloads/PC-Inspector-File-Recovery_13006819.html>


Damit kannst du die verlorenen Dateien wiederfinden und auf eine andere Partition oder Festplatte kopieren. Auf keinen Fall darfst du damit die Daten auf die Partition kopieren von der du die Daten retten möchtest, denn du würdest damit die noch zu rettenden Daten überschreiben. Sind alle Daten von der USB Festplatte gerettet, solltest du diese Festplatte
formatieren bevor du deine Dateien zurück kopierst.


Zu solchen Fehelern kommt es übrigens, wenn man den USB Stecker zu früh raus zieht (am bestem immer "Hardware sicher entfernen" Symbol im Sys-tray neben der Uhr auf der Taskleiste benutzen) oder USB Stecker erst abziehen wenn der Computer aus ist. Für USB Sticks gilt das gleiche. Weitere Ursachen können sein, wenn der Computer abstürzt wärend Dateien auf die Festplatte kopiert werden oder aber auch ein Virus. Das ist die US-Bezeichnung. Erst kommt immer die Weiter und dann die Länge.
In Deinem Fall ist es die deutsche Größe: 42/44 Weite, Länge halt 33 für mittel lange Beine.
Also wenn einer ca. 1,80 m groß ist, ist 33-Länger zu kurz. Der braucht 34 oder 36- er Länge. ich hab es jetzt so verstanden, dass du dir gar nicht so sorgen machst wg. der größe, sondern weil größe und gewicht etwas umproportional sind. vielleicht kann man ja deinen ss-diabetistest etwas v... Cup : AA - Umfang ab 60 .. Größte: ich hatte schon 85 N von Gossard in der Hand, wobei Cup N schon so groß wie ein Fußball ist, 85er-Umfang eher mittelmäßig (für Kleidergröße 42-44). Gängig ist in Deutschland noch so: 90 K, 95 J, 100 H, 105 G, 110 F, 115 E, dann ist meist Ende. Wenn Deine Freundin G hat ist das noch normal (wenn es nicht grad 105 Umfang ist !! ;-) <p>sie können das meiste davon tun, indem sie eine login.sql verwenden. login.sql wird während der - überraschenden - anmeldung ausgeführt und aus ihrem sqlpath oder dem aktuellen verzeichnis geladen. für die beispiele, die sie gegeben haben, haben sie wirklich den schlimmsten fall gewählt.</p><p>problem ist der sqlterminator. was auch immer sie dort eingeben, der schrägstrich wird als kostenloser sql-minator beibehalten. daneben sucht sqlplus zuerst nach dem sqlterminator und führt dies vor dem scannen zum string-terminator durch. ein fehler, wenn sie mich fragen. der schrägstrich kann in einer zeichenfolge verwendet werden, solange er nicht allein in einer separaten zeile steht. sobald sqlplus das als sqlterminator angegebene zeichen findet, ignoriert es alles andere und hört auf zu lesen.</p><p>der schrägstrich kann behandelt werden, solange er nicht alleine in einer zeile steht.</p><p>login.sql enthält:</p><pre><code>prompt run login.sql show sqlterminator show sqlblanklines set sqlblanklines on set sqlterminator ';' show sqlterminator show sqlblanklines prompt ready login.sql set echo on </code></pre><p>leigh.sql enthält:</p><pre><code>insert into t1 values ('fail bc semicolon a;a / '); insert into t1 values ('fail bc solo / aa / '); insert into t1 values ('ok / not solo aa /a '); delete from t1 where a = 'c a/ '; </code></pre><p>führen sie das skript aus:</p><pre><code>sqlplus leigh/leigh@orcl @leigh sql*plus: release 10.2.0.4.0 - production on thu aug 9 22:36:20 2012 copyright (c) 1982, 2007, oracle. all rights reserved. connected to: oracle database 11g enterprise edition release 11.2.0.3.0 - 64bit production with the partitioning, real application clusters, automatic storage management, olap, data mining and real application testing options run login.sql sqlterminator ";" (hex 3b) sqlblanklines off sqlterminator ";" (hex 3b) sqlblanklines on ready login.sql sql&gt; insert into t1 values ('fail bc semicolon 2 a;a 3 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('fail bc solo / 2 3 4 aa 5 / error: ora-01756: quoted string not properly terminated sql&gt; '); sp2-0042: unknown command "')" - rest of line ignored. sql&gt; sql&gt; insert into t1 values ('ok / not solo 2 3 4 aa 5 /a 6 '); 1 row created. sql&gt; sql&gt; delete from t1 where a = 'c 2 3 4 a/ 5 '; 0 rows deleted. </code></pre><p>sie müssen nicht mit start-/endblöcken herumspielen. der befehl sqlterminator innerhalb des befehls kann nicht verarbeitet werden, unabhängig davon, wo er sich in einer zeichenfolge befindet oder nicht. er kann keine zeilen mit schrägstrich allein in einer zeile in einer zeichenfolge verarbeiten.</p>