mysql有趣的操作

开启binlog

show variables like 'log_bin';

Variable_name|Value|
-------------+-----+
log_bin      |ON   |

//编辑mysql的配置文件
vi /etc/my.cnf
//在里面找到
mysqld]
# 开启binlog
log-bin = mysql-bin


//binlog有时候被损坏了,那么刷新便可
show master status;
reset master;//之前kafka客户端消费binlog的时候,发现binlog被强重启服务时候整坏了,后面执行这个好了

找出mysql所有的慢sql

这个一般用aliyun的在线工具就可以找出来

分析sql执行耗时长 (具体sql)

1. sql执行的效率如何?
   一般会排查  sql执行的效率怎么样,  explain安排上

2. 会不会是服务端程序开启的连接池不够造成的阻塞等待?

3. 会不会是mysql服务端开启的线程池大小有问题?


4. 更具体的sql查看耗时(类似于api耗时我们去浏览器查看各个步骤耗时一样)
set profiling=ON;
show profiles; //查出最近执行的sql对应的Query_ID
Query_ID|Duration  |Query                                                                                        |
--------+----------+---------------------------------------------------------------------------------------------+
     114| 0.0002555|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ SET SQL_SELECT_LIMIT=200       |
     115|8.92075875|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ show binlog events             |
     116|0.00020675|SHOW WARNINGS                                                                                |
     117|   0.00026|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ SET SQL_SELECT_LIMIT=DEFAULT   |
     118|0.00022625|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ SELECT DATABASE()              |
     119|  0.000268|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ SET SQL_SELECT_LIMIT=200       |
     120| 0.0013265|/* ApplicationName=DBeaver 22.0.5 - SQLEditor  */ show variables like 'profiling'|
show profile for query 18




查看索引每页数据

结论是:

  1. 非自增主键插入性能大概是自增的92%左右
  2. 非自增主键 数据页空间很浪费(16kb的页,有的用了14kb,有的才8kb, 但自增主键稳定在15kb)

show variables like '%innodb_page_size%';  //mysql一页大小查看

SELECT PAGE_NUMBER, PAGE_TYPE, NUMBER_RECORDS, DATA_SIZE, COMPRESSED_SIZE,PAGE_STATE
FROM information_schema.innodb_buffer_page
WHERE table_name like "%block_bgs2%" AND index_name = "PRIMARY";

PAGE_NUMBER|PAGE_TYPE|NUMBER_RECORDS|DATA_SIZE|COMPRESSED_SIZE|PAGE_STATE|
-----------+---------+--------------+---------+---------------+----------+
        372|INDEX    |           252|    15090|              0|FILE_PAGE |
        366|INDEX    |           252|    15090|              0|FILE_PAGE |
        361|INDEX    |           252|    15090|              0|FILE_PAGE |
        358|INDEX    |           252|    15090|              0|FILE_PAGE |
        353|INDEX    |           252|    15090|              0|FILE_PAGE |
        350|INDEX    |           252|    15090|              0|FILE_PAGE |
        345|INDEX    |           252|    15090|              0|FILE_PAGE |
        339|INDEX    |           252|    15090|              0|FILE_PAGE |

主键自增跟随件主键值插入性能对比

func main(){
    for {
        n := rand.Intn(1000000) + 1
        idMap[n] = true
        if len(idMap) > 700000 {
            break
        }
    }

    Sd()
    Sd()
    Sd()
    fmt.Println("完成")
}


func Sd() {
    end1, end2 := int64(0), int64(0)
    wg := &sync.WaitGroup{}
    wg.Add(2)
    go func() {
        defer wg.Done()
        startTime := time.Now().Unix()

        for i := 0; i < 2000; i++ {
            ds := g.Slice{}
            for j := 0; j < 100; j++ {
                ds = append(ds, g.Map{
                    dao.ForbiddenWords.Columns.Word: "sdasdas",
                })
            }
            _, err := dao.ForbiddenWords.Data(ds).Insert()
            if err != nil {
                g.Log().Error("msg", "ForbiddenWords", "err", err)
                return
            }
        }
        endTime := time.Now().Unix()
        end1 = endTime - startTime
        fmt.Println("自增主键时间消耗:", endTime-startTime)
    }()
    go func() {
        defer wg.Done()
        startTime := time.Now().Unix()
        getIdFn := func() uint64 {
            n := uint64(0)
            for i, _ := range idMap {
                n = uint64(i)
                delete(idMap, i)
                break
            }
            return n
        }

        for i := 0; i < 2000; i++ {
            ds := g.Slice{}
            for j := 0; j < 100; j++ {
                ds = append(ds, g.Map{
                    dao.ForbiddenWordssss.Columns.ID:   getIdFn(),
                    dao.ForbiddenWordssss.Columns.Word: "sdasdas",
                })
            }
            _, err := dao.ForbiddenWordssss.Data(ds).Insert()
            if err != nil {
                g.Log().Error("msg", "ForbiddenWords222222", "err", err)
                return
            }
        }
        endTime := time.Now().Unix()
        end2 = endTime - startTime
        fmt.Println("随机主键时间消耗:", end2)
    }()

    wg.Wait()

    fmt.Println("完成了完成了完成了完成了完成了完成了完成了完成了完成了完成了完成了2222222", "end1", end1, "end2", end2, "end2-end1", end2-end1)

}


自增主键时间消耗: 57
随机主键时间消耗: 62
完成了完成了完成了完成了完成了完成了完成了完成了完成了完成了完成了2222222 end1 57 end2 62 end2-end1 5


你可能感兴趣的:(mysql有趣的操作)