Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL Tabellen bleiben fragmentiert

Frage Entwicklung Datenbanken

Mitglied: RedBullmachtfit

RedBullmachtfit (Level 1) - Jetzt verbinden

31.07.2013 um 21:37 Uhr, 2457 Aufrufe, 7 Kommentare, 1 Danke

Hallo,
ich habe auf meinem Windows Server 2008 R2 einen MySQL-Server (5.6) laufen.
Um die Performance zu steigern und Probleme zu analysieren habe ich den Server mit "MySQL Tuner for Windows" überprüft.
Lt. diesem Tool sind einige Tabellen fragmentiert Es handelt sich ausschließlich um InnoDB Tabellen.
Ein "Optimize Table" und "Alter Table xyz Engine = InnoDB" hat jeweils nichts geholfen.
Habt Ihr noch einen Tipp für mich?
Danke Vorab!
Mitglied: Hitman4021
01.08.2013, aktualisiert um 08:21 Uhr
Hallo,

Vl. gibt es noch andere Wege die Performance zu verbessern.
Und bringt ein anderes DB Design mehr als ein "OPTIMIZE TABLE xyz;"

Und wenn du die Features von InnoDB nicht benötigst und viele Inserts hast hilft dir vl. auch ein Umstieq auf MySAM.

Gruß
Bitte warten ..
Mitglied: RedBullmachtfit
01.08.2013 um 08:38 Uhr
Ok, danke. Ich denke schon, dass InnoDB das richtige für die Tabellen ist. Ist aber schon komisch, dass sich offenbar die Tabellen nicht defragmentieren lassen. Vielleicht erstelle ich noch einen Dump und importiere diesen dann nochmal.
Gruß
Bitte warten ..
Mitglied: Hitman4021
01.08.2013 um 10:41 Uhr
Die Wahl der Engine hängt stark vom Einsatzzweck ab.
-Sind mehr Inserts als Selects?
-Benötigst du Foreign Keys?
-usw.

Gruß
Bitte warten ..
Mitglied: RedBullmachtfit
01.08.2013 um 11:00 Uhr
Die Datenbank ist für eine Adressverwaltung mit Lieferungen usw. usw. Hier werden regelmäßig (z.T. alle 30 Min) alle Daten aus unserer anderen Warenwirtschaft via ODBC (mit Flowheater.de) in die jeweiligen Tabellen geschaufelt, damit die Mitarbeiter recht aktuelle Daten abrufen können. Ist hier InnoDB nicht so gut geeignet? Foreign Key benötige ich bislang nicht. Volltextsuche usw. benötige ich natürlich.
Bez. des Datenimports: ODBC ist relativ langsam. Macht es Sinn für größere Tabellen eine temporäre Tabelle anzulegen, welche per ODBC befüllt wird, und erst danach die Daten der temporären Tabelle in die eigentliche zu kopieren? (INSERT INTO xyz SELECT * FROM xyz_tmp)
Gruß
Bitte warten ..
Mitglied: Hitman4021
01.08.2013 um 11:39 Uhr
Hallo,

also ich habe nen Datenimport am laufen mit ca. 10.000.000 Datensätzen.
Der läuft mit InnoDB in ca. 8 Stunden durch und mit MySAM benötige ich nur ca. 45min.
Also siehst du selbst das der Unterschied gewaltig ist.

Kommt auf den Import an. Aber normalerweise mache ich sowas über Tmp Tabellen.

Gruß
Bitte warten ..
Mitglied: Biber
01.08.2013, aktualisiert 02.08.2013
Moin ScArAbAeuS,

Zitat von RedBullmachtfit:
Bez. des Datenimports: ODBC ist relativ langsam. Macht es Sinn für größere Tabellen eine temporäre Tabelle anzulegen, welche per ODBC befüllt wird, und erst danach die Daten der temporären Tabelle in die eigentliche zu kopieren? (INSERT INTO xyz SELECT * FROM xyz_tmp)
Hier im Forum beantworten wir auch rhetorische Fragen, wenn es sein muss. Oder wenn wir sie nicht erkennen.

Natürlich geht es schneller, denn
a) in der temporären Tabelle wird nur angefügt, ohne jegliche Constraint/Kollisionsprüfung
b) es wird nur in die neue Tabelle geschrieben, aber nicht zusätzlich noch ganzen Indizes aktualisiert
c) ggf. kannst du noch jegliche Loggerei (und Lockerei ) für diese Tabelle abschalten - denn hier wirst du mit Sicherkeit kein Rollback machen

Zum Thema Fragmentierung
Die Datenbank ist für eine Adressverwaltung mit Lieferungen usw. usw. Hier werden regelmäßig (z.T. alle 30 Min) alle Daten aus unserer anderen Warenwirtschaft via ODBC (mit Flowheater.de) in die jeweiligen Tabellen geschaufelt, damit die Mitarbeiter recht aktuelle Daten abrufen können. Ist hier InnoDB nicht so gut geeignet? Foreign Key benötige ich bislang nicht. Volltextsuche usw. benötige ich natürlich.

Eine Adressverwaltung hat mit Sicherheit überproprortional viele Varchar-Felder, die einen sehr unterschiedlichen Füllungsgrad haben.
Physikalisch bedeutet das natürlich, dass bei einer maximal definierten Satzlänge von meinetwegen 1000 Byte mal ein Satz 120 Zeichen lang ist, ein anderer 372 Zeichen der nächste 605 Zeichen. Bei einer Neuanlage/einem Import werden diese Sätze hintereinander weggeschrieben.
Wenn einer dieser Sätze jemals upgedatet wird (jemand zieht von "Leverkusen" nach "Leverkusen-Mitte"), ändert sich sich die (echte) Satzlänge um +6 Zeichen . der Beispielsatz hat jetzt statt 372 Zeichen nunmehr 378 und passt nicht mehr an die bisherige Position. Also wird der komplette Satz an eine freie Stelle in der Tabelle kopiert mit einer reservierten Länge von 378 Zeichen und die "alten" 372 Zeichen werden als "frei" markiert.
(Ja, richtig, ein UPDATE-Befehl auf einen Satz bedeutet in diesem Fall, ein Satz wird INSERTed, ein anderer DELETEd. Ergo: 100 UPDATEs=200 Datensätze werden geändert...).

-> Diese systemimmanente Fragmentierung kannst du nicht mit OPTIMIZE oer ALTER TABLE in den Griff bekommen, sondern wirksamer mit regelmäßigen Export-Drop-Reimportläufen über mysqldump oder ähnliches. vorzugsweise einmal die Woche in der Nacht von Sonntag auf Montag um 03.15h. (Anmerkung: ich würde es wahrscheinlich schedulen und nicht online machen).

Besser (oder zumindest zu prüfen) wäre für diese stark frequentierte und durchmischte Tabellenstruktur ein Ändern der Varchar-Felder auf CHAR, also feste Länge. Das kostet zwar mehr Plattenplatz, aber die Fragmentierung ist natürlich bei einer "festen" Satzlänge spürbar geringer.

Grüße
Biber
Bitte warten ..
Mitglied: RedBullmachtfit
02.08.2013 um 08:23 Uhr
Hallo Biber! Vielen Dank für deine umfangreichen Tipps und Erklärungen. Bin recht neu in der Materie MySQL, daher die etwas rhetorische Frage
Mit den Varchar-Feldern hast du völlig recht. Ich probiere das ganze aus!
Gruß
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Inkonsistente MySQL Tabellen wiederherstellen
Frage von AndroxinDatenbanken1 Kommentar

Moin, aus "Gründen" musste ich diverse MySQL Datenbanken von einer formatierten Festplatte wiederherstellen. In der Regel waren auch noch ...

Datenbanken
MySQL - Tabulator in Tabelle einfügen
gelöst Frage von mabue88Datenbanken1 Kommentar

Hallo, wie kann ich in MySQL Workbench in eine Spalte vom Typ VARCHAR() ein Tabulator ('\t') als Zeichen einfügen? ...

Datenbanken
MySQL zwei Tabellen zusammenführen
gelöst Frage von RedBullmachtfitDatenbanken10 Kommentare

Hallo, ich habe in MySQL eine Artikel-Tabelle in welcher alle Artikel gespeichert sind sowie eine art_preise-Tabelle, in welcher nur ...

Datenbanken
MySQL - Feld aus anderer Tabelle hinzusummieren?
gelöst Frage von 1410640014Datenbanken5 Kommentare

Hallo, habe ein banales Problem und bin leider mit JOINS nicht gut bewandert. zwei simple Lagertabellen mit den Felder: ...

Neue Wissensbeiträge
Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 33 MinutenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 108 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless10 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Router & Routing
Wieso kann ich den UPD 7000-9000 nicht freigeben?
Frage von Jayk0bRouter & Routing8 Kommentare

Router: Telekom W 723V Ports: UDP 7000-9000 Können nicht frei gegeben werden. Benutzgrund: Rocket League 7000 – 9000 UDP ...

Router & Routing
Fritzbox Gastnetz - exposed Host - zur Sophos IPTV
Frage von medikopterRouter & Routing8 Kommentare

Hallo zusammen, ich habe eine Frage bezüglich des Fritz box Gastzugangs an einer Sophos UTM Home. An liebsten wäre ...