@Zaznaczyć Chcę rozmiar na dysku to dobra metoda? # du -sh /mnt/mysql_data/openx/f_scraper_banner_details.MYI 79G /mnt/mysql_data/openx/f_scraper_banner_details.MYI
@kasimir W pewnym momencie świat stał się zagmatwany, a niektóre organizacje zajmujące się standardami i producenci sprzętu zdecydowali, że lepiej jest zdefiniować kilobajt w systemie dziesiętnym. Standard IEC nazywa teraz podstawowy 2 kilobajt (1024 bajty) kibibajtem (KiB). W każdym razie MySQL nie wie, więc jeśli chcesz kilobajtów dziesiętnych IEC, podziel przez 1000.
Czy to zadziała w przypadku silnika pamięci InnoDB? Zgodnie z dokumentacją mysql tutaj - dev.mysql.com/doc/refman/5.7/en/show-table-status.html , pole data_length dla tego silnika zawiera rozmiar indeksu klastrowego. To nie będzie poprawnie reprezentować rozmiaru danych. Czy to będzie?
Lub jeszcze krótszy (bez podkwerendy): WYBIERZ nazwę_tabeli, okrągły (((data_długość + długość_indeksu) / 1024/1024), 2) SIZE_MBZ schematu_informacyjnego.TABLES GDZIE tabela_schema = BAZA DANYCH () ORDER BY (długość_danych + długość_indeksu) ASC;
Spróbuj wykonać następujące polecenie powłoki (zastąp DB_NAMEnazwą bazy danych):
mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head
W przypadku rozwiązania Drupal / drush sprawdź następujący przykładowy skrypt, który wyświetli największe używane tabele:
#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;"| head -n20
Oto inny sposób rozwiązania tego problemu przy użyciu wiersza polecenia bash.
for i in mysql -NB -e 'show databases'; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done
Zaadaptowano z odpowiedzi ChapMic, aby zaspokoić moją szczególną potrzebę.
Podaj tylko nazwę bazy danych, a następnie posortuj wszystkie tabele w kolejności malejącej - od NAJWIĘKSZEJ do NAJMNIEJSZEJ tabeli w wybranej bazie danych. Wymaga tylko 1 zmiennej do zastąpienia = nazwa bazy danych.
Wreszcie odpowiedź, która nie zależy od schematu_informacyjnego. W moim przypadku zgłoszono 660 MB, podczas gdy rzeczywisty rozmiar w systemie plików wynosi 1,8 GB
Uważam, że istniejące odpowiedzi w rzeczywistości nie podają wielkości tabel na dysku, co jest bardziej pomocne. To zapytanie zapewnia dokładniejsze oszacowanie dysku w porównaniu do rozmiaru tabeli na podstawie długości danych i indeksu. Musiałem użyć tego do wystąpienia AWS RDS, w którym nie można fizycznie zbadać dysku i sprawdzić rozmiarów plików.
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024)as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length)/1024/1024/1024),2)as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)orderby FILE_SIZE desc
SELECT TABLE_NAME AS table_name,
table_rows AS QuantofRows,
ROUND((data_length + index_length)/1024,2)AS total_size_kb
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema ='db'ORDERBY(data_length + index_length)DESC;
Chociaż może to odpowiedzieć na pytanie autora, brakuje w nim niektórych wyjaśnień i / lub linków do dokumentacji. Fragmenty surowego kodu nie są bardzo pomocne bez niektórych fraz wokół nich. Bardzo pomocne może się okazać, jak napisać dobrą odpowiedź . Edytuj swoją odpowiedź - Z recenzji
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.