Bagaimana dengan cepat memadam jadual yang sangat besar dalam MySQL

王林
Lepaskan: 2023-05-28 16:55:13
ke hadapan
4233 orang telah melayarinya

Pemadaman pantas jadual yang sangat besar dalam MySQL

Jika anda memadamkan jadual besar secara langsung dalam MySQL, ia mungkin menyebabkan MySQL tergantung, yang mungkin memberi kesan negatif pada perniagaan anda. Prasyarat untuk memadamkan jadual yang sangat besar ialah jadual adalah ruang jadual bebas, supaya pemadaman berkesan.

Jadual mencipta pautan keras

# du -sh pay_bills.ibd 
175G        pay_bills.ibd
# 创建硬链接
# ln pay_bills.ibd pay_bills.ibd_hdlk
Salin selepas log masuk

Melakukan pemadaman jadual

Dalam Linux, setiap fail yang disimpan akan mempunyai Indeks Inode yang menghala ke fail Berbilang nama fail boleh dihantar Indeks Inode yang sama menunjuk ke fail storan yang sama.

Jika Indeks Inode yang dirujuk oleh nama fail juga dirujuk oleh nama fail lain, hanya rujukan antara nama fail dan Indeks Inode akan dipadamkan

Jika Indeks Inode dirujuk oleh nama fail ialah Jika ia tidak dirujuk oleh nama fail lain, padamkan rujukan antara nama fail dan Indeks Inode dan padamkan fail storan yang ditunjukkan oleh Indeks Inode.

Malah, ia hanya memadamkan rujukan fail kepada pay_bills.ibd Rujukan pay_bills.ibd_hdlk kami kepada fail fizikal masih wujud, jadi tiada operasi pemadaman peringkat OS akan dilakukan mengurangkan kesan pada fail MySQL.

mysql> drop table pay_bills;
Query OK, 0 rows affected (3.24 sec)
Salin selepas log masuk

Laksanakan pemadaman fail

Pasang alat truncate

# yum install coreutils -y
Salin selepas log masuk

Laksanakan skrip pemadaman

#!/bin/bash
TRUNCATE=/usr/bin/truncate
# 从175G开始每次删除2G,最后如果脚本truncate后还剩下部分文件,使用rm删除
for i in `seq 175 -2 1`; do 
  $TRUNCATE -s ${i}G  pay_bills.ibd_hdlk
  sleep 1
done
rm -f pay_bills.ibd_hdlk
Salin selepas log masuk

MySQL dengan cepat mengosongkan data jadual besar

<🎜 untuk projek Apabila pergi ke dalam talian, jumlah data yang dicipta untuk ujian prestasi adalah besar, dan sebahagian daripadanya tidak boleh digunakan, tetapi sebahagian daripadanya mesti dikekalkan dalam banyak kes, adalah perlu untuk membersihkan data secara sistematik atau menapis data yang berguna sebelum memasukkannya ke dalam meja! Simpan struktur jadual atau bina semula jadual (eksport struktur jadual dalam pangkalan data), dan laksanakan semula pernyataan SQL.

MySQL memadam atau mengosongkan data jadual

Lima cara untuk mengosongkan data jadual

1 Buat asal pemulihan

2. pemadaman baris demi baris yang sangat perlahan dan tidak sesuai untuk memadamkan sejumlah besar data

3 struktur jadual dipadam bersama

4. Eksport struktur jadual dan laksanakannya semula; 5. Eksport semua struktur jadual pangkalan data dan laksanakan semula untuk mengosongkan semua jadual (selaras dengan 4)

Kosongkan sintaks data jadual

pangkas nama jadual jadual; (hanya struktur jadual dikekalkan, sangat cepat)

padam daripada nama jadual;

padam daripada nama jadual di mana nama lajur="value ";

DROP `t_product_events` IF EXIST;
CREATE TABLE `t_product_events` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT &#39;事件ID&#39;,
`level` int(11) NULL DEFAULT NULL,
`product_id` bigint(20) NOT NULL COMMENT &#39;产品类型ID&#39;,
`identifier` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT &#39;事件名称&#39;,
`description` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT &#39;事件描述&#39;,
`type` int(11) NOT NULL COMMENT &#39;事件类型,0:info(信息)、1:alert(告警)、2:error(故障)&#39;,
`ref_id` int(11) UNSIGNED NULL DEFAULT 0 COMMENT &#39;引入模板时有意义&#39;,
`original_required` tinyint(2) NOT NULL,
`update_required` tinyint(2) NOT NULL DEFAULT 0 COMMENT &#39;是否是标准功能的必选事件,0:可选,1:必选&#39;,
`custom` tinyint(2) NOT NULL COMMENT &#39;0:模板导入,1:自定义&#39;,
`method` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT &#39;事件对应的方法名称(根据identifier生成)&#39;,
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
`ref` bigint(20) NULL DEFAULT NULL,
`related` int(11) NULL DEFAULT 0 COMMENT &#39;被预发布或者已发布关联个数&#39;,
`copyright` tinyint(2) NULL DEFAULT 0 COMMENT &#39;是否发布过, 1 发布过 0未发布&#39;,
`prerelease` tinyint(2) NULL DEFAULT 0 COMMENT &#39;是否预发布过, 1 预发布过 0未预发布&#39;,
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_product_id`(`product_id`) USING BTREE COMMENT &#39;查询优化&#39;
) ENGINE = InnoDB AUTO_INCREMENT = 497560 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = &#39;产品类型事件表&#39; ROW_FORMAT = Compact;
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana dengan cepat memadam jadual yang sangat besar dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!