Rumah >pangkalan data >tutorial mysql >Apakah kegunaan jadual sementara mysql?
Peranan jadual sementara mysql: 1. Jadual sementara yang dibuat oleh pengguna sendiri digunakan untuk menyimpan data sementara 2. Apabila pengguna melaksanakan SQL yang kompleks, mereka boleh menggunakan jadual sementara untuk melakukan pengumpulan, pengisihan, penyahduplikasian dan lain-lain; Dan secara lalai, jadual sementara akan dimusnahkan secara automatik apabila anda memutuskan sambungan daripada pangkalan data.
Persekitaran pengendalian tutorial ini: sistem Windows 10, MySQL versi 5.7, komputer Dell G3.
Apakah kegunaan jadual sementara mysql?
Peranan jadual sementara MySQL
Jadual sementara MySQL digunakan dalam banyak senario Contohnya, jadual sementara yang dibuat oleh pengguna digunakan untuk menyimpan data sementara Apabila melaksanakan SQL kompleks secara dalaman, MySQL perlu menggunakan jadual sementara untuk pengelompokan, pengisihan, penyahduplikasian dan operasi lain. Berikut akan menyelesaikan beberapa konsep, klasifikasi dan masalah biasa jadual sementara MySQL.
Jenis jadual sementara MySQL
1. Jadual sementara luaran, jadual sementara yang dicipta dengan mencipta sintaks jadual sementara, enjin storan boleh ditentukan sebagai memory , innodb, myisam, dsb., jadual tersebut akan dibersihkan secara automatik selepas sesi tamat. Jika jadual sementara wujud pada masa yang sama dengan jadual bukan sementara, jadual bukan sementara tidak kelihatan. Perintah show tables tidak memaparkan maklumat jadual sementara.
Anda boleh melihat maklumat yang berkaitan tentang jadual sementara luaran melalui jadual sistem information_schema.INNODB_TEMP_TABLE_INFO Bahagian ini masih agak jarang digunakan.
2 Jadual sementara dalaman biasanya digunakan untuk melaksanakan SQL yang kompleks, seperti kumpulan mengikut, susunan mengikut, berbeza, kesatuan, dll. Jika pelan pelaksanaan mengandungi Menggunakan sementara, terdapat juga batalkan masa, tetapi apabila ruang tidak mencukupi, MySQL akan menggunakan jadual sementara yang dijana secara automatik untuk membantu menyelesaikan kerja.
Parameter berkaitan jadual sementara MySQL
1.max_heap_table_size: Nilai maksimum jadual memori yang dicipta oleh pengguna, juga digunakan bersama-sama dengan tmp_table_size untuk mengehadkan jadual sementara dalaman dalam saiz ingatan.
2.tmp_table_size: Nilai maksimum jadual sementara dalaman dalam ingatan ditentukan bersama-sama dengan parameter max_heap_table_size, dan nilai minimum kedua-duanya diambil. Jika jadual sementara melebihi nilai ini, ia akan dialihkan dari memori ke cakera.
3.innodb_tmpdir: operasi ALTER TABLE dalam talian yang membina semula jadual max_tmp_tables
4.default_tmp_storage_engine: Enjin storan lalai untuk jadual sementara luaran (jadual dicipta dengan mencipta jadual sementara).
5.innodb_temp_data_file_path: atribut fail temp di bawah enjin innodb. Adalah disyorkan untuk mengehadkan innodb_temp_data_file_path = ibtmp1:1G:autoextend:max:30G
6. Apabila menggunakan jadual innodb, dalam beberapa senario, contohnya, jika jadual sementara mempunyai terlalu banyak lajur atau saiz baris melebihi had, ralat "Saiz baris terlalu besar atau Terlalu banyak lajur" mungkin berlaku enjin innodb meja sementara harus ditukar kembali kepada myisam . tmpdir: Direktori jadual sementara apabila saiz jadual sementara melebihi ambang tertentu, ia akan dipindahkan dari memori ke cakera.
Pembolehubah status berkaitan jadual sementara MySQL1.Created_tmp_disk_tables: Bilangan jadual sementara dalaman yang dicipta oleh MySQL pada cakera apabila melaksanakan pernyataan SQL besar, Sebab yang mungkin ialah nilai memori maksimum yang diperuntukkan kepada jadual sementara adalah kecil, atau terdapat sejumlah besar pengisihan, pengelompokan, penyahduplikasi dan operasi lain dalam SQL, dan SQL perlu dioptimumkan. 2.Created_tmp_files: Bilangan jadual sementara yang dicipta 3.Created_tmp_tables: Bilangan jadual sementara dalaman yang dicipta oleh MySQL apabila melaksanakan pernyataan SQL. 4.Slave_open_temp_tables pernyataan atau mod campuran hanya boleh dilihat sedang digunakan.
Nilai slave_open_temp_tables menunjukkan bilangan jadual sementara yang telah dibuat oleh hamba semasa melalui replikasi binlog_format hanya sah di bawah penyataan dan bercampur-campur sesi mesti keluar Boleh.
Berikut ialah maklumat rekod binlog daripada perpustakaan:
1. Jadual sementara MySQL mungkin mengurangkan ruang cakera yang tersedia:
Sebelum MySQL versi 5.7, enjin storan jadual sementara menjadi lalai kepada myisam Jadual sementara myisam akan memadamkan jadual sementara secara automatik selepas pelaksanaan SQL permukaan. Walau bagaimanapun, bermula dari versi 5.7, enjin storan lalai untuk jadual sementara telah ditukar kepada innodb Walaupun terdapat peningkatan tertentu dalam prestasi, kerana jadual sementara enjin innodb berkongsi ruang jadual ibtmp1, beberapa sesi mencipta jadual sementara sementara. pada masa yang sama di bawah concurrency tinggi Apabila jadual dibuka, ruang jadual akan menjadi sangat besar dan tidak boleh dikurangkan secara dinamik dan tidak boleh dikeluarkan melainkan MySQL dimulakan semula.
Anda boleh menetapkan nilai maksimum untuk ruang jadual sementara, seperti 10G, seperti berikut:
innodb_temp_data_file_path = ibtmp1:128M:autoextend:max:10G
Apabila ruang jadual sementara mencapai maksimum Apabila nilai ialah 10G, pelaksanaan SQL akan melaporkan ralat, menjejaskan pelaksanaan biasa aplikasi.
Untuk masalah ruang meja sementara yang berlebihan, biasanya terdapat kaedah lain untuk menyelesaikan masalah, seperti:
Tetapkan enjin penyimpanan meja sementara kepada myisam Walaupun mungkin terdapat beberapa masalah prestasi, ia tidak akan menyebabkan masalah ruang cakera.
2. Penyataan SQL:
(1) Tambah indeks yang sesuai
(2) Tapis lebih banyak data dalam keadaan di mana
(3) Tulis semula SQL dan optimumkan pelan pelaksanaan
(4 ) Jika anda perlu menggunakan jadual sementara, pastikan anda mengurangkan konkurensi. Adalah disyorkan untuk menggunakan cakera keras SSD.
3.buat asal berkaitan
1) Gunakan pilihan konfigurasi innodb_rollback_segments untuk menentukan bilangan segmen rollback Tetapan lalai ialah 128, yang juga merupakan nilai maksimum. Satu segmen rollback sentiasa diperuntukkan kepada ruang jadual sistem dan 32 segmen rollback dikhaskan untuk ruang jadual sementara (ibtmp1). Oleh itu, untuk memperuntukkan segmen rollback untuk membuat asal jadual, tetapkan innodb_rollback_segments kepada nilai yang lebih besar daripada 33. Apabila mengkonfigurasi ruang jadual buat asal yang berasingan, segmen rollback dalam ruang jadual sistem akan menjadi tidak aktif.
Maksudnya, apabila segmen rollback melebihi 128, jadual sementara diperlukan untuk bantuan kecemasan.
tablespace -> segment -> extent(64个page,1M) -> page(16kb)
2) truncate undo
Apabila innodb_undo_log_truncate dicetuskan, operasi undo table space truncate mencipta fail undo_space_number_trunc.log sementara dalam direktori log pelayan, yang ditakrifkan oleh innodb_log_group_home_dir. Jika kegagalan sistem berlaku semasa operasi pemangkasan, fail log sementara membenarkan proses permulaan untuk mengenali ruang meja buat asal terpenggal dan meneruskan operasi.
4.binlog cache berkaitan
Gunakan cache log binari dan nilai mencapai nilai yang ditetapkan oleh binlog_cache_size, dan gunakan fail sementara untuk menyimpan bilangan urus niaga daripada perubahan dalam urus niaga. Boleh dijejaki secara berasingan melalui pembolehubah status Binlog_stmt_cache_disk_use.
Ringkasan
1 Daripada pemahaman di atas, jadual sementara MySQL tidak boleh dielakkan dalam pemantauan dan pengoptimuman harian.
2. Selain itu, ia juga boleh digunakan dengan sewajarnya dalam pelaksanaan perniagaan, seperti menyimpan sementara sedikit maklumat sebagai jadual perantaraan, dsb.
3. Apabila binlog_format adalah sama dengan mod ROW semasa proses replikasi, log binlog yang berkaitan dengan jadual sementara tidak direkodkan (kecuali untuk arahan drop).
[Cadangan berkaitan: tutorial video mysql]
Atas ialah kandungan terperinci Apakah kegunaan jadual sementara mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!