文章851
标签121
分类10

Mysql data_free 表占用监控内存

2024-12-30T13:15:08.png

今天 发现数据库延迟 , 最高延迟达到20多分钟, 事故原因在于 热表数据未归档, 导致累计了1.2亿的数据量.
mysql 服务器发生雪崩现象. 越来越差所以需要查看问题.

背景知识

information_schema 是 MySQL 的系统数据库,它包含了关于所有其他数据库和对象的信息。通过查询该数据库,我们可以获取数据库中的表、列、索引等的详细信息。这对数据库的性能优化、存储管理以及故障排查都非常有帮助。

示例 SQL 查询

我们将使用以下 SQL 查询来获取特定数据库(例如 table_name)中所有表的存储信息:

SELECT 
    t.table_schema,          -- 表示表所属的数据库名称
    t.table_name,            -- 表示表的名称
    t.table_rows,            -- 表示表中行的数量
    t.data_length,           -- 表示表中数据的字节长度
    t.index_length,          -- 表示表中索引的字节长度
    CONCAT(ROUND(t.data_length/1024/1024,2), 'm') AS dlength,  -- 数据长度以 MB 为单位,保留两位小数
    CONCAT(ROUND(t.data_free/1024/1024,2), 'm') AS data_free    -- 空闲数据长度以 MB 为单位,保留两位小数
FROM 
    information_schema.tables t  -- 从 information_schema.tables 表中查询
WHERE 
    t.table_schema = 'table_name'  -- 只查询指定的数据库
ORDER BY 
    data_length DESC;  -- 按数据长度降序排列结果

查询解析

  • 选择字段:该查询从 information_schema.tables 表中选择了多个字段,包括数据库名称、表名称、行数、数据长度和索引长度。
  • 数据转换:为了便于理解,数据长度和空闲空间以 MB 为单位显示,使用 ROUND 函数保留两位小数。
  • 排序:结果按数据长度降序排列,方便识别哪些表占用了最多的存储空间。

查询结果分析

执行该查询后,您将获得如下信息:

  • table_schema:表示表所属的数据库。
  • table_name:每张表的名称。
  • table_rows:每张表的记录行数。
  • data_length:表中实际存储数据的字节长度。
  • index_length:表中索引所占用的字节长度。
  • dlength:以 MB 为单位的实际数据长度,便于快速查看。
  • data_free:以 MB 为单位的空闲空间,指示表中未使用的存储。

实际应用场景

了解表的存储信息可以帮助我们在以下方面进行优化和管理:

  1. 存储优化:通过识别占用大量存储的表,您可以决定是否需要进行归档或清理。
  2. 性能监控:检查表的行数和索引长度可以帮助您了解表的使用情况,进而优化查询性能。
  3. 故障排查:如果遇到性能问题,您可以通过此查询快速定位到可能的问题表。

结论

掌握 MySQL 数据库中表的存储信息是数据库管理中的一项基本技能。通过使用 information_schema 提供的元数据,可以有效地获取和分析数据库的性能和存储情况。希望本文的示例和解析能够帮助您更好地管理自己的数据库,提升数据存储和访问的效率。

MySQL的连接池、异步、断线重连

MySQL的连接池、异步、断线重连

2024-12-12T00:11:32.png

Curl post请求发送json数据两种方式(Window/Linux)

2024-12-30T13:10:54.png

设置请求头Content-Type

curl发送post请求,默认的content-type是:application/x-www-form-urlencoded。要发送json格式,则需要设置请求头的content-type为application/json

使用-H 或--header参数设置content type:

-H "Content-Type: application/json"

发送数据

发送数据使用的是-d--data参数,curl支持两种请求方式:

  • 直接在命令行中输入json字符串
  • 发送json文件

Linux命令行输入json字符串发送数据

curl -X POST http://localhost:8080/api -H "Content-Type: application/json" \
  -d '{"p1":"xyz","p2":"xyz"}'

其中:-d参数使用单引号括起整个字符串,json内容里的属性以及值使用双引号。

Windows命令行直接输入json字符串发送数据

这里特别要说明的是:Windows下,-d参数后不能使用单引号把发送的json字符串括起来,需要使用双引号。而json内容里的属性的双引号需要做转义:

curl -X POST http://localhost:8080/api -H "Content-Type: application/json" \
  -d "{\"p1\":\"xyz\",\"p2\":\"xyz\"}"
````

## 使用json文件发送数据
如果数据量比较大,则适合使用json文件发送。示例如下:

curl -X POST http://localhost:8080/api -H "Content-Type: application/json" -d @sendfile.json

注意:示例中的文件名是“sendfile.json”,需要在文件名前加上@符号。

PHP 7.4 的 Array and string offset access syntax with curly braces is deprecated 的错误和解决方法

PHP 升级到 7.4 之后,会收到 Array and string offset access syntax with curly braces is deprecated 的错误,这是因为:

PHP7.4 不再支持使用大括号访问数组以及字符串的偏移,就是不支持数组{}写法,统一为数组[]

比如:

$index{$start+7}

就要改成:

$index[$start+7]
">