Masalah:
Apakah ada cara menghitung jumlah byte yang ditempati oleh pembuatan tabel, saya tahu bahwa Anda bisa mendapatkan beberapa informasi dari information_schema.tables tetapi informasi itu tidak cukup akurat.
Apa yang sebenarnya diperlukan adalah jumlah byte sesuai dengan definisi tabel untuk innodb saja dan collation juga dapat dianggap sebagai utf-8-general-ci
Misalnya tes tabel adalah sebagai berikut
buat tabel test
(
col1 varchar (25),
col2 int,
col3 varchar (3),
col4 char (15),
col5 datetime
);
Sekarang akan perlu mengetahui ukuran total baris yang dapat diakumulasikan dalam satu baris sesuai dengan jenis kolom dalam tabel.
Menemukan semacam solusi serupa di MSSQL tetapi perlu versi MySQL-nya
Skrip untuk memperkirakan ukuran baris untuk tabel apa pun
Bantuan apa pun sangat kami hargai.
sumber
Jawaban:
Setelah banyak berpikir dan meneliti menemukan satu jawaban yang sangat membantu dalam mencapai apa yang diperlukan. Ini adalah skrip perl dan tautan referensi
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
Terima kasih semua atas bantuannya.
sumber
-uUser -pPass
ke mysql dan mysqldump commandlines dalam skrip (atau coba--defaults-extra-file=/etc/mysql/debian.cnf
di Ubuntu / Debian) dan jalankan dengan database sebagai argumen pertama sepertiperl test.pl mydatabase
Anda perlu mengetahui ukuran dalam byte dari setiap bidang sesuai dengan tipe data ( referensi MySQL di sini ), lalu jumlahkan nilai-nilai ini bersama-sama.
sumber
Langkah 1:
20 karakter bahasa Inggris: 2 + 1 * 20
20 karakter Mid-east / Slavic: 2 + 2 * 20
20 karakter Asia: 2 + 3 * 20
20 karakter Emoji: 2 + 4 * 20 (dan Anda perlu
utf8mb4
)Langkah 2: Tambahkan itu.
Langkah 3: Kalikan dengan antara 2 dan 3 untuk memungkinkan overhead InnoDB. Saya telah menemukan bahwa faktor itu biasanya bekerja. (Tapi tidak untuk tabel kecil, dan belum tentu bagus untuk tabel yang dipartisi.)
Saya tidak melihat alasan untuk mengambil ukuran maksimum setiap kolom.
Anda bisa lebih dekat daripada
SHOW TABLE STATUS
atauinformation_schema
data yang setara :Langkah 1:
SELECT COUNT(*)
- gunakan ini sebagai penggantiRows
Langkah 2: Dapatkan
Data_length + Index_length + Data_free
Langkah 3: Bagilah.
sumber
SELECT AVG(LENGTH(varchar_col))
- Catatan:LENGTH
sudah byte ; tidak perlu dikalikan 2/3/4. (CHAR_LENGTH
mendapatkan panjang karakter.)Saya telah membuat skrip bash kasar untuk menghitung ukuran baris dan memperingatkan jika melewati batas berdasarkan skema:
sumber
Ada beberapa pertanyaan dari tipe ini, misalnya yang ini: Bagaimana memperkirakan / memprediksi ukuran data dan ukuran indeks suatu tabel di MySQL
Salah satu perbedaan antara pertanyaan itu dan tabel Anda adalah keberadaan string panjang variabel di Anda - ingat untuk memperhitungkan ukuran maksimum yang mereka bisa.
Juga ingat bahwa dari versi 5 dan seterusnya yang
varchar(25)
hingga 25 karakter tidak hingga 25 byte jadi jika Anda cenderung melihat karakter non-ASCII dalam string Anda, ukuran kolom bisa membengkak hingga maksimum 100 byte karena beberapa karakter mengambil empat byte untuk mewakili - misalnya "tumpukan emoji poo" (yang, saya bercanda tidak, memang ada - jika browser + font Anda saat ini mendukungnya sepertinya: 💩) adalah 0xF0 0x9F 0x92 0xA9. Sebelum v5 mySQL dihitung byte bukan karakter saat menentukan panjang tipe string.Edit Mengenai Otomasi
Dalam hal mengotomatisasi proses, Anda harus dapat memperoleh semua informasi yang dibutuhkan dari
INFORMATION_SCHEMA
tabel dengan cara yang mirip dengan skrip yang Anda temukan untuk MS SQL Server. Lihat https://dev.mysql.com/doc/refman/5.0/id/information-schema.html untuk beberapa dokumentasi yang membahasnya.sumber
INFORMATION_SCHEMA
tabel harus mencakup informasi yang Anda butuhkan. Lihat dev.mysql.com/doc/refman/5.0/id/information-schema.html untuk beberapa dokumentasi yang membahasnya.