Kaip atverti didelį SQL išklotinės failą Mac kompiuteryje (be strigimų)

Du kartus spustelite 20–50 GB .sql eksportą, o jūsų redaktorius suksis, užstrigs ir galiausiai numirs. Net negalite atverti failo — jau nekalbant apie vienos išpūstos lentelės pašalinimą. Štai kodėl redaktoriai užspringsta, kokie yra komandinės eilutės sprendimai ir greitesnis būdas.

Produkcinės duomenų bazės išklotinė lengvai gali siekti dešimtis gigabaitų. Vos tik pabandžius ją atverti įprastame teksto redaktoriuje, jūsų Mac ventiliatorius įsisuka, pasirodo „vaivorykštinis kamuoliukas“ ir galiausiai programa užsidaro — kartu kartais nusinešdama neišsaugotą darbą kituose languose.

Kodėl redaktoriai užspringsta ties didelėmis išklotinėmis

VS Code, TextEdit, Sublime Text ir panašūs yra sukurti taip, kad įkeltų visą failą į atmintį ir galėtų iškart slinkti, ieškoti bei paryškinti sintaksę. Tai puiku 2 MB pirminio kodo failui. Tačiau 40 GB išklotinei tai reiškia, kad redaktorius bando RAM atmintyje išskirti 40 GB (plius papildomą vietą savo vidinėms duomenų struktūroms).

Jūsų Mac turi 16 arba 32 GB. Gerokai anksčiau, nei failas įkeliamas iki galo, sistemai pritrūksta fizinės atminties, ji pradeda kelti duomenis į diską ir visiškai užstringa. Dauguma redaktorių taip pat tiesiog atsisako: VS Code apriboja failus maždaug ties 50 MB pilnam redaktoriui ir pereina į nuskurdintą režimą, TextEdit tiesiog užstringa, o Sublime skiria atmintį tol, kol užstringa. Net jei ir pavyktų atverti failą, sintaksės paryškinimas ir paieška iš naujo skenuotų gigabaitus su kiekvienu klavišo paspaudimu.

Esminė problema: šie įrankiai daro prielaidą, kad reikia atsitiktinės prieigos prie viso dokumento. Išklotinei to nereikia — tai nuoseklus sakinių sąrašas. Jums tereikia per jį pratekėti.

Komandinės eilutės būdas

Jūsų Mac esantys Unix įrankiai jau veikia srautiniu būdu, todėl niekada neįkelia viso failo. Tai klasikinė pirmoji priemonė:

# Pažvelkite į pirmąsias ir paskutines eilutes neatverdami viso failo
head -n 50 dump.sql
tail -n 50 dump.sql

# Padalinkite išklotinę į 100 MB dalis, pavadintas part_aa, part_ab, ...
split -b 100m dump.sql part_

# Ištraukite vienos lentelės bloką tarp dviejų žymeklių
sed -n '/CREATE TABLE `users`/,/UNLOCK TABLES/p' dump.sql > users.sql

Tai veikia, bet yra trapu ir varginantis. split -b pjauna ties neapdorotų baitų ribomis, todėl perpjaus tiesiai per INSERT sakinio vidurį — gautos dalys pačios savaime nebus tinkamas SQL. sed intervalo triukas priklauso nuo tikslių žymeklių, kuriuos atsitiktinai naudoja konkretus išklotinės įrankis; pakeitus MySQL versiją ar perėjus prie PostgreSQL šablonas nebeatitiks. Ir nė vienas iš jų neparodo, kas iš tikrųjų yra faile — jums tenka spėlioti, kuri lentelė yra ta 30 GB, dar prieš galint ją tikslingai pasirinkti.

Atverti ir filtruoti su DumpCleaner

DumpCleaner buvo sukurtas būtent tokiam failo dydžiui. Jis perskaito išklotinę srautiniu būdu, kaip ir komandinė eilutė, tačiau supranta SQL struktūrą, todėl gaunate tikrą lentelių sąrašą ir saugią, sakinius suprantančią išvestį:

  1. Nutempkite failą. DumpCleaner atveria išklotinę skaitydamas ją ~1 MB dalimis — 50 GB failas atsiveria naudodamas maždaug 50 MB RAM, todėl niekas neužstringa.
  2. Matykite kiekvieną lentelę. Programa nuskaito išklotinę ir išvardija kiekvieną lentelę su jos dydžiu, todėl iškart pastebite, kuri išpučia failą.
  3. Atžymėkite tai, ko nereikia. Nuimkite varnelę nuo milžiniškų žurnalo, sesijų ar analitikos lentelių. DumpCleaner išsaugo sakinius nepažeistus — jokių perpjautų INSERT.
  4. Eksportuokite. Įrašykite naują, mažesnį .sql failą, kuris pagaliau patogiai atsiveria ir importuojasi. Jūsų originalus failas niekada nekeičiamas.

Kadangi programa apdoroja 50 GB ir didesnes išklotines su pastoviu atminties naudojimu, jums visiškai nereikia galvoti apie savo Mac RAM. O kadangi ji skaito šaltinį ir rašo į atskirą išvestį, išklotinė, nuo kurios pradėjote, lieka lygiai tokia, kokia buvo.

Atverkite išklotines, kurių jūsų redaktorius negali

DumpCleaner skaito bet kokio dydžio SQL išklotines srautiniu būdu su pastoviu atminties naudojimu — jokių strigimų, jokio disko naudojimo, jokio laukimo. Nutempkite 50 GB failą, atmeskite nereikalingas lenteles, eksportuokite mažesnį. Vietinė macOS ir iPadOS programa, vienkartinis pirkimas.

Atsisiųsti iš App Store

Dažnai užduodami klausimai

Kokio dydžio SQL išklotinę gali apdoroti DumpCleaner?

Fiksuoto apribojimo nėra. Programa apdoroja failą kaip srautą mažomis dalimis, todėl 50 GB ir didesnės išklotinės veikia kaip mažos — dydį riboja jūsų diskas, o ne RAM.

Ar DumpCleaner įkelia visą failą į RAM?

Ne. Skirtingai nei teksto redaktorius, jis skaito išklotinę mažomis dalimis ir išlaiko atmintį maždaug pastovią — apie 50 MB, nesvarbu, ar failas yra 200 MB, ar 50 GB.

Ar galiu padalinti išklotinę pagal lenteles?

Taip. Vietoje to, kad split aklai pjautų ties baitų ribomis, DumpCleaner supranta lentelių struktūrą. Atžymėkite nereikalingas lenteles ir eksportuokite švarų failą tik su tomis, kurias paliekate.

Ar DumpCleaner keičia mano originalų failą?

Ne. Šaltinio išklotinė tik skaitoma — DumpCleaner visada rašo naują failą, todėl jūsų originalas lieka nepaliestas.

Nustokite kovoti su savo redaktoriumi

Nutempkite didelę išklotinę, atmeskite nereikalingas lenteles, eksportuokite failą, kuris iš tikrųjų atsiveria. DumpCleaner apdoroja bet kokį dydį su pastoviu atminties naudojimu.

Atsisiųsti iš App Store