Làm cách nào để xem bảng tạm thời trong MySQL?

Vì lý do đó, tôi quyết định tập hợp chúng thành một loại tóm tắt có thể giúp khắc phục sự cố khi sử dụng chúng. Do những thay đổi lớn giữa các bản phát hành chính của MySQL, tôi đã chia bài viết theo chúng

mysql 5. 6

(Nếu bạn vẫn đang sử dụng phiên bản đó, bạn nên xem xét nâng cấp nó ngay khi nó đạt đến EOL. )

Bảng tạm thời do người dùng tạo

Khi một bảng được tạo bằng mệnh đề CREATE TEMPORARY TABLE, nó sẽ sử dụng công cụ được xác định bởi default_tmp_storage_engine (mặc định là InnoDB) nếu không được định nghĩa rõ ràng theo cách khác và sẽ được lưu trữ bên trong thư mục được xác định bởi biến tmpdir

Một ví dụ có thể trông như thế này

mysql

1

2

3

4

5

6

7

8

9

10

11

mysql > tạo bảng tạm thời tmp1 (id int, a varchar(10));

Truy vấn OK, 0 hàng bị ảnh hưởng (0.02 giây)

 

mysql > hiển thị tạo bảng tmp1\G

*************************** 1. hàng ***************************

Bảng . tmp1

Tạo Bảng . TẠO TẠM THỜI BẢNG `tmp1` (

`id` int (11) MẶC ĐỊNH NULL,

`a` varchar (10) MẶC ĐỊNH NULL

) CÔNG DỤNG=InnoDB MẶC ĐỊNH CHARSET=latin1

1 hàng trong bộ (0. 00 giây)

Nhưng làm thế nào để bạn tìm thấy tệp được tạo trên đĩa lưu trữ dữ liệu bảng này?

mysql

1

2

3

4

5

6

7

mysql > select table_id, dấu cách,name,path from information_schema.INNODB_SYS_DATAFILES tham gia information_schema. INNODB_SYS_TABLES sử dụng ( dấu cách ) where name like '%tmp%'\G

*************************** 1. hàng ***************************

table_id. 21

dấu cách . 7

tên. tmp/ #sql11765a_2_1

đường dẫn. /data / hộp cát / . ibd /tmp/#sql11765a_2_1.ibd

1 hàng trong bộ (0. 00 giây)

Chúng tôi không thấy tên bảng gốc ở đây. Ngay cả khi nhìn vào vùng đệm, chúng tôi vẫn không có tên thật

mysql

1

2

3

4

5

6

7

mysql > chọn TABLE_NAME từ information_schema.INNODB_BUFFER_PAGE ở đâu tên_bảng thích '%tmp%';

+--------------------------------- +

| TABLE_NAME                .

+--------------------------------- +

| `tmp`. ` #sql11765a_2_1`.

+--------------------------------- +

1 hàng trong bộ (0. 07 giây)

Đây là tiện ích mở rộng có sẵn trong Máy chủ Percona cho MySQL 5. 6 biến thể – bảng information_schema bổ sung. GLOBAL_TEMPORARY_TABLES. Với cái đó, chúng ta có thể tạo một truy vấn cung cấp thêm một chút thông tin

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

mysql > select SPACE ,TABLE_SCHEMA,TABLE_NAME, . TÊN, ĐƯỜNG ENGINE,g.NAME,PATH từ information_schema. GLOBAL_TEMPORARY_TABLES g TRÁI THAM GIA information_schema. INNODB_SYS_TABLES s BẬT s. TÊN THÍCH CONCAT ( '%', g.name, '%' ) TRÁI THAM GIA information_schema. INNODB_SYS_DATAFILES SỬ DỤNG ( SPACE )\G

*************************** 1. hàng ***************************

SPACE . 16

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp1

ĐỘNG CƠ . InnoDB

TÊN. #sql12c75d_2_0

ĐƯỜNG. /data / hộp cát / . ibd /tmp/#sql12c75d_2_0.ibd

*************************** 2. hàng ***************************

SPACE . NULL

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp3

ĐỘNG CƠ . Bộ nhớ

TÊN. #sql12c75d_2_2

ĐƯỜNG. NULL

*************************** 3. hàng ***************************

SPACE . NULL

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp2

ĐỘNG CƠ . MyISAM

TÊN. #sql12c75d_2_1

ĐƯỜNG. NULL

3 hàng trong bộ (0. 00 giây)

Vì vậy, ít nhất là đối với bảng tạm thời InnoDB, chúng ta có thể tương quan tên bảng chính xác với đường dẫn tệp

Bảng tạm thời nội bộ

Đây là những cái được tạo bởi MySQL trong quá trình thực hiện truy vấn. Chúng tôi không có bất kỳ quyền truy cập nào vào các bảng như vậy, nhưng hãy xem cách chúng tôi có thể điều tra việc sử dụng chúng

Loại này được tạo trong bộ nhớ (sử dụng công cụ MEMORY) miễn là kích thước của nó không vượt quá các biến tmp_table_size hoặc max_heap_table_size và nếu không có cột TEXT/BLOB nào được sử dụng. Tuy nhiên, nếu một bảng như vậy phải được lưu trữ trên đĩa, thì trong MySQL 5. 6, nó sẽ sử dụng bộ lưu trữ MyISAM và tmpdir cũng được sử dụng làm vị trí. Ví dụ nhanh, trên bảng sysbench 10 triệu hàng, truy vấn tạo bảng tạm thời nội bộ lớn

mysql

1

mysql > SELECT pad, COUNT(*) FROM sbtest1 GROUP BY pad;

Và chúng ta có thể thấy các tệp liên quan đang phát triển

mysql

1

2

3

4

$ ls -lh /data /sandboxes/msb_5_6_51/tmp/

tổng 808 triệu

-rw - rw-- -- 1 przemek przemek 329M 29 tháng 9 23. 24 '#sql_11765a_0. MYD'

-rw - rw-- -- 1 przemek przemek 479M 29 tháng 9 23. 24 '#sql_11765a_0. MYI'

Mặc dù vậy, có thể khó tương quan giữa một bảng tạm thời cụ thể và kết nối máy khách của nó. Thông tin duy nhất tôi tìm thấy là

mysql

1

2

3

4

5

6

7

8

9

10

11

mysql > chọn FILE_NAME,EVENT_NAME từ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAMEtừ FILE_NAME,EVENT_NAME từ performance_schema.file_summary_by_instance ở đâu file_name like '%tmp%' \G

*************************** 1. hàng ***************************

FILE_NAME. /data / hộp cát /msb_5_6_51/tmp/Innodb Merge Temp File

EVENT_NAME. chờ / io /tệp/innodb/innodb_temp_file

*************************** 2. hàng ***************************

FILE_NAME. /data / hộp cát / . MYI /tmp/#sql_11765a_0.MYI

EVENT_NAME. chờ / io /tệp/myisam/kfile

*************************** 3. hàng ***************************

FILE_NAME. /data / hộp cát / . MYD /tmp/#sql_11765a_0.MYD

EVENT_NAME. chờ / io /tệp/myisam/dfile

3 hàng trong bộ (0. 00 giây)

mysql 5. 7

Bảng tạm thời do người dùng tạo

Như trước đó, biến default_tmp_storage_engine quyết định công cụ được sử dụng. Nhưng hai thay đổi đã xảy ra ở đây. Các bảng tạm thời của InnoDB hiện sử dụng một vùng bảng dùng chung chuyên dụng – ibtmp1, trừ khi nó được nén. Hơn nữa, chúng tôi có một chế độ xem information_schema bổ sung. INNODB_TEMP_TABLE_INFO. Cho rằng, chúng ta có thể nhận được thông tin như dưới đây

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

mysql > chọn tên, FILE_NAME, FILE_TYPE, TABLESPACE_NAME, SPACE, PER_TABLE_TABLESPACE, IS_COMPRESSED from INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO tham gia INFORMATION_SCHEMA. FILES on FILE_ID =SPACE\G

*************************** 1. hàng ***************************

tên. #sql12cf58_2_5

FILE_NAME. . /ibtmp1

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_temporary

SPACE . 109

PER_TABLE_TABLESPACE. SAI

IS_COMPRESSED. SAI

*************************** 2. hàng ***************************

tên. #sql12cf58_2_4

FILE_NAME. /data / hộp cát / . ibd /tmp/#sql12cf58_2_4.ibd

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_file_per_table_110

SPACE . 110

PER_TABLE_TABLESPACE. TRUE

IS_COMPRESSED. TRUE

2 hàng trong bộ (0. 01 giây)

Nhưng một lần nữa để tương quan với tên bảng, cần sử dụng tiện ích mở rộng Percona Server for MySQL

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

mysql > chọn g. TABLE_SCHEMA, g. TABLE_NAME, name, FILE_NAME, FILE_TYPE, TABLESPACE_NAME, SPACE, PER_TABLE_TABLESPACE, IS_COMPRESSED from INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO tham gia INFORMATION_SCHEMA. FILES on FILE_ID =SPACE . GLOBAL_TEMPORARY_TABLES information_schema.GLOBAL_TEMPORARY_TABLES g sử dụng (name)\G

*************************** 1. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp1

tên. #sql12cf58_2_5

FILE_NAME. . /ibtmp1

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_temporary

SPACE . 109

PER_TABLE_TABLESPACE. SAI

IS_COMPRESSED. SAI

*************************** 2. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp3

tên. #sql12cf58_2_4

FILE_NAME. /data / hộp cát / . ibd /tmp/#sql12cf58_2_4.ibd

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_file_per_table_110

SPACE . 110

PER_TABLE_TABLESPACE. TRUE

IS_COMPRESSED. TRUE

2 hàng trong bộ (0. 01 giây)

Ngoài ra, để xem thêm MyISAM và liên quan. frm, chúng ta có thể sử dụng

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

mysql > CHỌN g. TABLE_SCHEMA, g. TABLE_NAME, NAME, f. FILE_NAME, g. ENGINE , TABLESPACE_NAME, PER_TABLE_TABLESPACE, SPACE FROM information_schema.GLOBAL_TEMPORARY_TABLES g tham gia performance_schema. file_instance f BẬT FILE_NAME THÍCH . tên,('%', g.name, '%' ) tham gia trái INFORMATION_SCHEMA. INNODB_TEMP_TABLE_INFO sử dụng (name) tham gia trái INFORMATION_SCHEMA. TỆP fl trên không gian=FILE_ID order by table_name\G

*************************** 1. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp1

TÊN. #sql12cf58_2_5

FILE_NAME. /data / hộp cát / . từ /tmp/#sql12cf58_2_5.frm

ĐỘNG CƠ . InnoDB

TABLESPACE_NAME. innodb_temporary

PER_TABLE_TABLESPACE. SAI

SPACE . 109

*************************** 2. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp2

TÊN. #sql12cf58_2_6

FILE_NAME. /data / hộp cát / . MYD /tmp/#sql12cf58_2_6.MYD

ĐỘNG CƠ . MyISAM

TABLESPACE_NAME. NULL

PER_TABLE_TABLESPACE. NULL

SPACE . NULL

*************************** 3. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp2

TÊN. #sql12cf58_2_6

FILE_NAME. /data / hộp cát / . MYI /tmp/#sql12cf58_2_6.MYI

ĐỘNG CƠ . MyISAM

TABLESPACE_NAME. NULL

PER_TABLE_TABLESPACE. NULL

SPACE . NULL

*************************** 4. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp2

TÊN. #sql12cf58_2_6

FILE_NAME. /data / hộp cát / . từ /tmp/#sql12cf58_2_6.frm

ĐỘNG CƠ . MyISAM

TABLESPACE_NAME. NULL

PER_TABLE_TABLESPACE. NULL

SPACE . NULL

*************************** 5. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp3

TÊN. #sql12cf58_2_4

FILE_NAME. /data / hộp cát / . từ /tmp/#sql12cf58_2_4.frm

ĐỘNG CƠ . InnoDB

TABLESPACE_NAME. innodb_file_per_table_110

PER_TABLE_TABLESPACE. TRUE

SPACE . 110

*************************** 6. hàng ***************************

TABLE_SCHEMA. kiểm tra

TABLE_NAME. tmp3

TÊN. #sql12cf58_2_4

FILE_NAME. /data / hộp cát / . ibd /tmp/#sql12cf58_2_4.ibd

ĐỘNG CƠ . InnoDB

TABLESPACE_NAME. innodb_file_per_table_110

PER_TABLE_TABLESPACE. TRUE

SPACE . 110

6 hàng trong bộ (0. 01 giây)

Bảng tạm thời nội bộ

Đối với các bảng tạm thời nội bộ trong 5. 7, nó tương tự về bộ nhớ trong. Nhưng công cụ mặc định cho các bảng tạm thời trên đĩa được xác định thông qua một biến mới. internal_tmp_disk_storage_engine, hiện cũng mặc định là InnoDB và không gian bảng ibtmp1 cũng được sử dụng để lưu trữ nội dung của nó

Thông tin chi tiết về không gian bảng tạm thời được chia sẻ này khá hạn chế. Chúng tôi có thể kiểm tra kích thước của nó và dung lượng trống hiện có. Một chế độ xem ví dụ đã được thực hiện trong quá trình truy vấn nặng đang diễn ra

mysql

1

2

3

4

5

6

7

8

9

10

11

mysql > select FILE_NAME, FILE_TYPE, TABLESPACE_NAME, ENGINE, TOTAL_EXTENTS, FREE_EXTENTS, EXTENT_SIZE/1024/1024 as 'extent in MB', MAXIMUM_SIZE from INFORMATION_SCHEMA.FILES ở đâu tên_tệp như '%ibtmp%' < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <\G

*************************** 1. hàng ***************************

FILE_NAME. . /ibtmp1

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_temporary

ĐỘNG CƠ . InnoDB

TOTAL_EXTENTS. 588

FREE_EXTENTS. 1

phạm vi in MB. 1. 00000000

MAXIMUM_SIZE. NULL

1 hàng trong bộ (0. 00 giây)

Và sau khi truy vấn xong, chúng ta có thể thấy hầu hết dung lượng đã được giải phóng (FREE_EXTENTS)

mysql

1

2

3

4

5

6

7

8

9

10

11

mysql > select FILE_NAME, FILE_TYPE, TABLESPACE_NAME, ENGINE, TOTAL_EXTENTS, FREE_EXTENTS, EXTENT_SIZE/1024/1024 as 'extent in MB', MAXIMUM_SIZE from INFORMATION_SCHEMA.FILES ở đâu tên_tệp như '%ibtmp%' < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < <\G

*************************** 1. hàng ***************************

FILE_NAME. . /ibtmp1

FILE_TYPE. TẠM THỜI

TABLESPACE_NAME. innodb_temporary

ĐỘNG CƠ . InnoDB

TOTAL_EXTENTS. 780

FREE_EXTENTS. 764

phạm vi in MB. 1. 00000000

MAXIMUM_SIZE. NULL

1 hàng trong bộ (0. 00 giây)

Tuy nhiên, không gian bảng sẽ không bị cắt trừ khi MySQL được khởi động lại

Vỏ bọc

1

2

$ ls - lh msb_5_7_35/data/ibtmp*

- rw - r ---- . 1 przemek przemek 780M Sep 30 19:50 msb_5_7_35 / dữ liệu / ibtmp1

Để xem hoạt động viết (có thể cao hơn nhiều đối với một truy vấn so với tổng kích thước tăng lên do truy vấn đó tạo ra)

mysql

1

2

3

4

5

mysql > chọn FILE_NAME, SUM_NUMBER_OF_BYTES_WRITE /1024/1024/1024 as GB_written from performance_schema.file_summary_by_instance ở đâu file_name like '%ibtmp%' \G

*************************** 1. hàng ***************************

FILE_NAME. /data / hộp cát /msb_5_7_35/data/ibtmp1

GB_write. 46. 925933837891

1 hàng trong bộ (0. 00 giây)

mysql 8. 0

Để đơn giản, hãy bỏ qua cách mọi thứ hoạt động trước 8. 0. 16 và chỉ thảo luận về cách nó hoạt động kể từ đó, vì những thay đổi trong vấn đề đó là khá quan trọng

  • biến internal_tmp_disk_storage_engine đã bị xóa và không thể sử dụng công cụ MyISAM cho các bảng tạm thời bên trong
  • không gian bảng ibtmp1 được chia sẻ không còn được sử dụng cho một trong hai loại bảng tạm thời
  • một nhóm các Không gian bảng tạm thời phiên mới đã được giới thiệu để xử lý cả bảng tạm thời của người dùng và nội bộ trên đĩa và được đặt theo mặc định trong thư mục dữ liệu chính
  • công cụ TempTable mới cho các bảng trong bộ nhớ sử dụng cả không gian trong bộ nhớ cũng như các tệp được mmap trên đĩa

Bảng tạm thời do người dùng tạo

Đối với một bảng tạm thời ví dụ

mysql

1

2

3

4

5

6

7

8

9

10

mysql > tạo bảng tạm thời tmp1 (id int, a varchar(10));

Truy vấn OK, 0 hàng bị ảnh hưởng (0.00 giây)

 

mysql > chọn * từ information_schema.INNODB_TEMP_TABLE_INFO;

+-----------+----------------+--------+------------

| TABLE_ID . TÊN           | N_COLS . SPACE       .

+-----------+----------------+--------+------------

|     1089 . #sqlbbeb3_a_12. 5. 4243767289.

+-----------+----------------+--------+------------

1 hàng trong bộ (0. 00 giây)

Chúng tôi có thể tương quan tệp nào đã được sử dụng từ nhóm đó bằng cách xem số khoảng trắng

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

mysql > chọn * từ INFORMATION_SCHEMA.INNODB_SESSION_TEMP_TABLESPACES ;

+-----+------------+------------------------ +--

| ID . SPACE       . ĐƯỜNG ĐI                       | KÍCH THƯỚC  . TIỂU BANG    . MỤC ĐÍCH   .

+-----+------------+------------------------ +--

| 10 . 4243767290 . . / #innodb_temp/temp_10. ibt. 81920. TÍCH CỰC. NỘI TẠI.

| 10 . 4243767289 . . / #innodb_temp/temp_9. ibt. 98304. TÍCH CỰC. NGƯỜI SỬ DỤNG.

0 . 4243767281 . . / #innodb_temp/temp_1. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767282 . . / #innodb_temp/temp_2. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767283 . . / #innodb_temp/temp_3. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767284 . . / #innodb_temp/temp_4. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767285 . . / #innodb_temp/temp_5. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767286 . . / #innodb_temp/temp_6. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767287 . . / #innodb_temp/temp_7. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

0 . 4243767288 . . / #innodb_temp/temp_8. ibt. 81920. KHÔNG HOẠT ĐỘNG. KHÔNG AI.

+-----+------------+------------------------ +--

10 hàng trong bộ (0. 00 giây)

Nhưng một lần nữa, không có cách nào để tìm tên bảng. May mắn thay, Máy chủ Percona dành cho MySQL vẫn có bảng GLOBAL_TEMPORARY_TABLES, do đó, với ba chế độ xem hệ thống có sẵn, chúng tôi có thể nhận được thông tin tốt hơn về các bảng tạm thời do người dùng tạo bằng nhiều công cụ khác nhau, như bên dưới

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

mysql > CHỌN SESSION_ID, SPACE, PATH, TABLE_SCHEMA, TABLE_NAME, SIZE, DATA_LENGTH, INDEX_LENGTH, ENGINE, PURPOSE FROM information_schema.GLOBAL_TEMPORARY_TABLES TRÁI THAM GIA information_schema. INNODB_TEMP_TABLE_INFO SỬ DỤNG (NAME) THAM GIA TRÁI INFORMATION_SCHEMA. INNODB_SESSION_TEMP_TABLESPACES SỬ DỤNG ( SPACE )\G

*************************** 1. hàng ***************************

  SESSION_ID. 10

      SPACE . 4243767290

        ĐƯỜNG. . / #innodb_temp/temp_10. ibt

TABLE_SCHEMA. kiểm tra

  TABLE_NAME. tmp3

        KÍCH THƯỚC. 98304

DATA_LENGTH. 16384

INDEX_LENGTH. 0

      ĐỘNG CƠ . InnoDB

    MỤC ĐÍCH. NGƯỜI DÙNG

*************************** 2. hàng ***************************

  SESSION_ID. 13

      SPACE . NULL

        ĐƯỜNG. NULL

TABLE_SCHEMA. kiểm tra

  TABLE_NAME. tmp41

        KÍCH THƯỚC. NULL

DATA_LENGTH. 24

INDEX_LENGTH. 1024

      ĐỘNG CƠ . MyISAM

    MỤC ĐÍCH. NULL

*************************** 3. hàng ***************************

  SESSION_ID. 13

      SPACE . NULL

        ĐƯỜNG. NULL

TABLE_SCHEMA. kiểm tra

  TABLE_NAME. tmp40

        KÍCH THƯỚC. NULL

DATA_LENGTH. 128256

INDEX_LENGTH. 0

      ĐỘNG CƠ . Bộ nhớ

    MỤC ĐÍCH. NULL

*************************** 4. hàng ***************************

  SESSION_ID. 13

      SPACE . 4243767287

        ĐƯỜNG. . / #innodb_temp/temp_7. ibt

TABLE_SCHEMA. kiểm tra

  TABLE_NAME. tmp33

        KÍCH THƯỚC. 98304

DATA_LENGTH. 16384

INDEX_LENGTH. 0

      ĐỘNG CƠ . InnoDB

    MỤC ĐÍCH. NGƯỜI DÙNG

4 hàng trong bộ (0. 01 giây)

Tương tự như ibtmp1, các không gian bảng này không bị cắt bớt ngoài việc khởi động lại MySQL

Từ phần trên, chúng ta có thể thấy rằng kết nối người dùng 10 có một bảng tạm thời InnoDB đang mở và kết nối 13 có ba bảng tạm thời sử dụng ba công cụ khác nhau

Bảng tạm thời nội bộ

Trong khi một truy vấn nặng đang chạy trong kết nối 10, chúng tôi có thể nhận được các chế độ xem sau

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

mysql > hiển thị danh sách quy trình \G

...

*************************** 2. hàng ***************************

    Id. 10

  Người dùng . hộp cát

  Máy chủ . máy chủ

    db. kiểm tra

Lệnh. Truy vấn

  Thời gian . 108

  Trạng thái. chuyển đổi HEAP sang ondisk

  Thông tin. CHỌN bàn phím, ĐẾM (*) FROM sbtest1 GROUP BY pad

 

mysql > chọn * từ performance_schema.memory_summary_global_by_event_name ở đâu EVENT_NAME thích '%temptable%'\G

*************************** 1. hàng ***************************

          .       EVENT_NAME: bộ nhớ/hấp dẫn/ physical_disk

          .     COUNT_ALLOC: 2

          .       COUNT_FREE: 0

  SUM_NUMBER_OF_BYTES_ALLOC. 1073741824

    SUM_NUMBER_OF_BYTES_FREE. 0

          .   LOW_COUNT_USED: 0

          . 2

          . HIGH_COUNT_USED: 2

    LOW_NUMBER_OF_BYTES_USED. 0

CURRENT_NUMBER_OF_BYTES_USED. 1073741824

  HIGH_NUMBER_OF_BYTES_USED. 1073741824

*************************** 2. hàng ***************************

          .       EVENT_NAME: bộ nhớ/hấp dẫn/ physical_ram

          .     COUNT_ALLOC: 12

          .       COUNT_FREE: 1

  SUM_NUMBER_OF_BYTES_ALLOC. 1074790400

    SUM_NUMBER_OF_BYTES_FREE. 1048576

          .   LOW_COUNT_USED: 0

          . 11

          . HIGH_COUNT_USED: 11

    LOW_NUMBER_OF_BYTES_USED. 0

CURRENT_NUMBER_OF_BYTES_USED. 1073741824

  HIGH_NUMBER_OF_BYTES_USED. 1073741824

2 hàng trong bộ (0. 00 giây)

 

mysql > chọn * từ INFORMATION_SCHEMA.INNODB_SESSION_TEMP_TABLESPACES ở đâu = 10\G

*************************** 1. hàng ***************************

     ID. 10

   SPACE . 4243767290

   PATH. . / #innodb_temp/temp_10. ibt

   SIZE. 2399141888

  BANG. ĐANG HOẠT ĐỘNG

MỤC ĐÍCH. NỘI TẠI

*************************** 2. hàng ***************************

     ID. 10

   SPACE . 4243767289

   PATH. . / #innodb_temp/temp_9. ibt

   SIZE. 98304

  BANG. ĐANG HOẠT ĐỘNG

MỤC ĐÍCH. NGƯỜI DÙNG

2 hàng trong bộ (0. 00 giây)

Từ phần trên, chúng ta có thể thấy truy vấn đã tạo ra một bảng tạm thời lớn, lần đầu tiên vượt quá biến temptable_max_ram và tiếp tục phát triển trong một tệp được mmap (vẫn là công cụ TempTable), nhưng cũng như temptable_max_mmap đã đạt được, bảng phải được chuyển đổi thành on- . Cùng một nhóm các bảng InnoDB tạm thời được sử dụng trong trường hợp này, nhưng chúng ta có thể thấy thông tin về mục đích, tùy thuộc vào việc bảng là bên ngoài (do người dùng tạo) hay bên trong

Tệp được mmapped không hiển thị trong hệ thống tệp vì tệp đã bị xóa, nhưng có thể được xem bằng lsof

Vỏ bọc

1

mysqld   862655 przemek   52u      REG              253,3  133644288  52764900 /data/sandboxes/msb_ps8_0_23/tmp/mysql_temptable.8YIGV8 (đã xóa)

Điều quan trọng cần biết ở đây là miễn là dung lượng mmapped chưa vượt quá, bộ đếm Created_tmp_disk_tables không tăng lên ngay cả khi một tệp được tạo trên đĩa tại đây

Ngoài ra, trong Máy chủ Percona dành cho MySQL, nhật ký chậm mở rộng, kích thước của các bảng tạm thời khi công cụ TempTable được sử dụng, không được tính đến. https. //jira. percona. com/browse/PS-5168 – nó hiển thị “Tmp_table_sizes. 0”

Trong một số trường hợp sử dụng, có sự cố được báo cáo với TempTable. Có thể chuyển về Memory engine cũ thông qua biến internal_tmp_mem_storage_engine nếu cần

Chúng tôi có thể tạo chế độ xem trên bảng tạm thời trong MySQL không?

Định nghĩa không thể tham chiếu đến bảng TẠM THỜI và bạn không thể tạo chế độ xem TẠM THỜI . Điều đó có nghĩa nếu bạn nghĩ về nó. Một chế độ xem sẽ có thể sử dụng được trong các phiên khác. Nhưng một bảng tạm thời được giới hạn trong phiên hiện tại nơi nó được tạo.

Chúng ta có thể xem bảng tạm thời trong SQL không?

Các bảng tạm thời cục bộ chỉ hiển thị trong phiên hiện tại HOẶC bạn có thể nói rằng chúng chỉ hiển thị với kết nối hiện tại của người dùng. Chúng bị xóa khi người dùng ngắt kết nối khỏi các phiên bản của Microsoft SQL Server.

Bảng tạm thời được lưu trữ trong MySQL ở đâu?

Một bảng tạm thời bên trong có thể được giữ trong bộ nhớ và được xử lý bởi công cụ lưu trữ BỘ NHỚ hoặc được lưu trữ trên đĩa bởi công cụ lưu trữ InnoDB hoặc MyISAM. If an internal temporary table is created as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table.

Chúng ta có thể tạo bảng xem tạm thời không?

Không, một khung nhìn bao gồm một câu lệnh CHỌN duy nhất. Bạn không thể tạo hoặc xóa bảng trong chế độ xem .