Apakah buruk untuk membuat banyak tabel sementara mysql secara bersamaan?

8

Saya perlu membuat analisis statistik yang berat untuk mengirimkan beberapa data kepada pengguna. Saat ini, saya menangkap data dari mysql dan memprosesnya melalui PHParray. Namun, tabel sementara mysql cukup baik (sangat efisien dan lebih cepat daripada array PHP; jelas karena mekanismenya).

Solusi sementara saya adalah membentuk tabel sementara atas setiap permintaan (yaitu koneksi) untuk mengimpor dan memproses data. Namun, saya tidak yakin apakah ada kekurangan untuk membuat banyak tabel sementara secara bersamaan?

Bisakah ini membuat masalah untuk server mysql? Atau saya dapat menggunakannya sebagai alternatif untuk array PHP dalam berbagai permintaan simultan?

Googlebot
sumber

Jawaban:

6

Anda ingin mencegah membuat tabel temp sebanyak mungkin: Mencegah penyalinan ke tabel temp (sql)

Mereka tidak bekerja dengan baik di Replikasi MySQL: Bagaimana binlog diperbarui untuk tabel sementara MySQL?

Karena tabel temp adalah fakta kehidupan di dunia DB, Anda mungkin harus membuat beberapa perubahan ortodoks untuk mengakomodasi keberadaannya.

Biasanya, mysqld memiliki kebiasaan menempatkan tabel tmp di /tmpatau di mana pun tmpdir dikonfigurasi. Itu biasanya pada beberapa disk yang tidak curiga.

Alternatif yang menarik adalah mengatur disk RAM dan mengkonfigurasi ulang tmpdir untuk menggunakannya

LANGKAH 01: Buat Titik Gunung untuk Disk RAM

mkdir /var/tmpfs

LANGKAH 02: Tambahkan disk RAM ke / etc / fstab (16GB)

echo "none   /var/tmpfs              tmpfs   defaults,size=16g        1 2" >> /etc/fstab

LANGKAH 03: Tambahkan baris ini ke /etc/my.cnf

[mysqld]
tmpdir=/var/tmpfs

LANGKAH 04: Aktifkan Disk RAM

Anda dapat melakukan salah satu dari yang berikut:

  1. Reboot ulang DB Server
  2. mount -t tmpfs -o size=16g none /var/tmpfs

Sebelum Anda melakukan ini, pastikan Anda memiliki RAM yang cukup

Cobalah !!!

RolandoMySQLDBA
sumber
2
Tabel temp implisit tidak memiliki dampak pada replikasi, apakah SBR atau RBR. Tabel temp eksplisit mengirim semua DDL melintasi kawat.
Rick James
4

"Banyak tabel sementara mysql" - Masalah potensial:

  • table_open_cache (dan lagu lainnya) - Anda dapat (tetapi tidak mungkin) mencapai batas tertentu
  • Ram bloat - Anda bisa (tetapi tidak cenderung) menggunakan lebih banyak ram. Jika ini mengarah ke swapping, itu benar-benar buruk.

Saya tidak akan khawatir tentang "banyak" kecuali Anda benar-benar memiliki ratusan tabel temp sekaligus.

Berapa banyak utas (SHOW PROCESSLIST; abaikan 'Tidur') yang berjalan sekaligus? Bahkan sistem yang sibuk jarang memiliki lebih dari 10 sekaligus.

Untuk tabel temp implisit , mari kita lihat SELECT yang menyebabkannya; dimungkinkan untuk mendesain ulang kueri untuk menghindari tabel temp.

Saya tidak suka menggunakan ram-disk - itu mengambil RAM dari kemungkinan caching lainnya, dan menjalankan risiko memukul batas keras (ukuran disk).

Rick James
sumber