网站标签该站未曾设置keywords
网站描述该站未曾设置description
上一篇:鼎力-鼎力公司
下一篇:苏州市工艺美术行业协会
seo综合信息
SEO信息 百度来访IP:- | 移动端来访IP:- | 出站链接:1 | 站内链接:8 IP网速: IP地址:- 地址:- | 网速:313毫秒 ALEXA排名 世界排名:- | 预估IP:- | 预估PV:- 备案信息 - | 名称:- | 已创建:未知
收录 百度 360 搜狗 谷歌 查询 0 0 0 0
电脑关键词 手机关键词 页面友好 首页位置 索引 近期收录 0 0 电脑端优秀 - 0 0
服务器信息 协议类型 HTTP/1.1 200 OK 页面类型 text/html 服务器类型 nginx/1.18.0 (Ubuntu) 程序支持 连接标识 W/"666c39fe-305d2" 消息发送 2024年8月5日 15时02分22秒 GZIP检测 已启用GZIP压缩 源文件大小 180.42KB 压缩后大小 29.54KB 压缩率 83.63%
网站快照睡 月 花 儿 睡 月 花 儿 H o m e A b o u t B l o g T a g s 1 1 P o s t s 6 7 S i t e m a p C o m m o n w e a l 4 0 4 S e a r c h T a b l e o f C o n t e n t s O v e r v i e w 戛 戛 H a p p y 后 端 , 操 作 系 统 , 互 联 网 , 程 序 开 发 , L i n u x , 数 据 库 , M y S q l , G o l a n g , R u b y R S S T h e m e N e x T w o r k s b e s t w i t h J a v a S c r i p t e n a b l e d m y s q l o r 导 致 的 全 表 扫 描 P o s t e d o n 2 0 2 1 1 2 1 4 I n m y s q l o r 导 致 的 全 表 扫 描 e x p l a i n s e l e c t i d f r o m t r a d e l o g w h e r e t r a d e i d = 1 2 o r o p e r a t o r = 1 0 l i m i t 1 0 ; + + + + + + + + + | t y p e | p o s s i b l e _ k e y s | k e y | k e y _ l e n | r e f | r o w s | f i l t e r e d | E x t r a | + + + + + + + + + | A L L | t r a d e i d | N U L L | N U L L | N U L L | 3 8 9 1 0 7 | 1 0 . 0 0 | U s i n g w h e r e | + + + + + + + + + 查 询 条 件 中 有 o r 时 , m y s q l 会 分 别 查 询 每 一 个 条 件 , 然 后 再 把 结 果 合 并 在 一 起 。 先 对 t r a d e i d = ‘ 1 2 ’ 进 行 判 断 , 发 现 可 以 使 用 索 引 , 再 对 o p e r a t o r = 1 0 进 行 判 断 , 发 现 不 能 使 用 索 引 , 只 好 全 表 扫 描 , 即 然 都 全 表 扫 描 了 , 顺 带 也 就 可 以 判 断 当 前 记 录 的 t r a d e i d 是 否 等 于 1 2 , 就 不 需 要 在 单 独 再 搜 索 t r a d e i d 索 引 树 了 。 所 以 当 o r 条 件 中 出 现 没 有 索 引 的 字 段 会 导 致 使 用 全 表 扫 描 。 如 果 出 现 的 字 段 都 有 索 引 , m y s q l 会 尽 量 使 用 每 个 列 的 索 引 e x p l a i n s e l e c t i d f r o m t r a d e l o g w h e r e t r a d e i d = 1 2 o r i d = 1 0 l i m i t 1 0 ; + + + + + + + | i d | s e l e c t _ t y p e | t a b l e | t y p e | p o s s i b l e _ k e y s | k e y | + + + + + + + | 1 | S I M P L E | t r a d e l o g | i n d e x _ m e r g e | P R I M A R Y , t r a d e i d | t r a d e i d , P R I M A R Y | + + + + + + + + + + + + + | k e y _ l e n | r e f | r o w s | f i l t e r e d | E x t r a | + + + + + + | 1 3 1 , 4 | N U L L | 2 | 1 0 0 . 0 0 | U s i n g u n i o n ( t r a d e i d , P R I M A R Y ) ; U s i n g w h e r e | + + + + + + 虽 然 条 件 中 也 有 o r , 但 t r a d e i d 和 i d 都 有 索 引 , m y s q l 分 别 单 独 对 这 两 个 索 引 扫 描 , 然 后 把 找 到 的 结 果 再 合 并 到 一 起 。 执 行 计 划 显 示 t y p e : i n d e x _ m e r g e , k e y : t r a d e i d , P R I M A R Y , E x t r a : U s i n g u n i o n 同 样 的 条 件 , 把 o r 换 成 a n d 时 是 可 以 走 索 引 的 , 因 为 找 的 是 要 满 足 所 有 条 件 的 记 录 , 那 么 就 可 以 在 最 小 的 索 引 树 先 找 到 一 条 满 足 条 件 的 记 录 , 再 检 查 这 条 记 录 是 否 还 满 足 其 它 条 件 e x p l a i n s e l e c t i d f r o m t r a d e l o g w h e r e t r a d e i d = 1 2 a n d o p e r a t o r = 1 0 l i m i t 1 0 ; + + + + + + + + + | t y p e | p o s s i b l e _ k e y s | k e y | k e y _ l e n | r e f | r o w s | f i l t e r e d | E x t r a | + + + + + + + + + | r e f | t r a d e i d | t r a d e i d | 1 3 1 | c o n s t | 1 | 1 0 . 0 0 | U s i n g w h e r e | + + + + + + + + + k e y : t r a d e i d 显 示 使 用 了 t r a d e i d 索 引 。 通 过 索 引 树 先 找 到 一 条 t r a d e i d = ‘ 1 2 ’ 的 记 录 , 再 回 表 查 询 o p e r a t o r 是 否 等 于 1 0 。 m y s q l 如 何 为 字 符 串 合 理 创 建 索 引 P o s t e d o n 2 0 2 1 1 1 2 0 I n m y s q l 对 于 一 般 长 度 的 字 符 串 , 用 整 个 字 符 串 直 接 作 为 索 引 即 可 , 但 对 于 比 较 长 的 字 符 串 , 比 如 e m a i l , 身 份 证 号 如 果 直 接 作 为 索 引 , 会 占 用 较 大 的 磁 盘 空 间 前 缀 索 引 可 以 为 较 长 的 字 符 串 设 置 前 缀 索 引 , 缩 短 索 引 字 段 的 长 度 , 减 少 占 用 磁 盘 的 空 间 a l t e r t a b l e u s e r s a d d i n d e x i n d e x 1 ( e m a i l ) ; a l t e r t a b l e u s e r s a d d i n d e x i n d e x 2 ( e m a i l ( 6 ) ) ; 索 引 i n d e x 1 包 含 了 整 个 字 符 串 , 而 i n d e x 2 只 包 含 了 前 6 个 字 符 串 , 比 i n d e x 1 占 用 更 少 的 空 间 。 那 么 如 何 定 义 前 缀 长 度 呢 ? 如 果 太 短 , 索 引 的 区 分 度 就 会 不 高 , 增 加 额 外 的 扫 描 次 数 , 查 询 效 率 下 降 , 太 长 又 不 能 节 省 空 间 。 可 以 用 下 面 的 方 法 进 行 判 断 , 选 择 最 接 近 1 的 , 同 时 长 度 最 短 的 来 作 为 前 缀 。 前 缀 索 引 的 长 度 首 先 计 算 出 这 个 列 上 有 多 少 个 不 同 的 值 ( 计 为 t o t a l ) s e l e c t c o u n t ( d i s t i n c t e m a i l ) a s t o t a l f r o m u s e r s ; 然 后 取 不 同 长 度 的 前 缀 , 计 算 有 多 少 个 不 同 的 值 , 分 别 除 以 t o t a l , 选 择 最 接 近 1 的 且 前 缀 较 短 的 s e l e c t c o u n t ( d i s t i n c t l e f t ( e m a i l , 4 ) ) / t o t a l a s L 4 , c o u n t ( d i s t i n c t l e f t ( e m a i l , 5 ) ) / t o t a l a s L 5 , c o u n t ( d i s t i n c t l e f t ( e m a i l , 6 ) ) / t o t a l a s L 6 , c o u n t ( d i s t i n c t l e f t ( e m a i l , 7 ) ) / t o t a l a s L 7 , f r o m u s e r s ; 假 设 结 果 为 : L 4 4 0 % , L 5 9 0 % , L 6 9 6 % , L 7 9 6 % 。 而 你 只 接 受 大 于 9 5 % 的 区 分 度 , L 6 / L 7 等 符 合 , 那 么 选 择 前 缀 为 6 的 最 为 适 合 。 增 加 扫 描 次 数 假 设 u s e r s 表 有 如 下 记 录 , 分 别 建 立 索 引 i n d e x 1 ( e m a i l ) , i n d e x 2 ( e m a i l , 5 ) i d , e m a i l , , u s e r n a m e , a d d e r s i d 1 , x i a o m i n g 1 2 3 @ x y z . c o m , 省 略 i d 2 , x i a o m i n g 4 5 6 @ x y z . c o m , 省 略 i d 3 , x i a o m i n g 7 8 9 @ x y z . c o m , 省 略 i d 4 , x i a o m i n g A B C @ x y z . c o m , 省 略 i d 5 , z h a n g h a o 1 2 3 @ x y z . c o m , 省 略 i d 6 , z h a n g h a o 4 5 6 @ x y z . c o m , 省 略 索 引 i n d e x 1 的 页 节 点 数 据 ( x i a o m i n g 1 2 3 @ x y z . c o m , i d 1 ) , ( x i a o m i n g 4 5 6 @ x y z . c o m , i d 2 ) , ( x i a o m i n g 7 8 9 @ x y z . c o m , i d 3 ) , ( x i a o m i n g A B C @ x y z . c o m , i d 4 ) , ( z h a n g 1 2 3 @ x y z . c o m , i d 5 ) , ( z h a n g 4 5 6 @ x y z . c o m , i d 6 ) 索 引 i n d e x 2 的 页 节 点 数 据 ( x i a o m , i d 1 ) , ( x i a o m , i d 2 ) , ( x i a o m , i d 3 ) , ( x i a o m , i d 4 ) , ( z h a n g , i d 5 ) , ( z h a n g , i d 6 ) 可 以 看 到 , 前 缀 索 引 占 用 更 少 的 数 据 空 间 索 引 查 询 过 程 现 查 询 e m a i l 为 x i a o m i n g 4 5 6 @ x y z . c o m 的 用 户 信 息 s e l e c t * f r o m u s e r s w h e r e e m a i l = x i a o m i n g 4 5 6 @ x y z . c o m ; i n d e x 1 索 引 查 询 过 程 搜 索 i n d e x 1 索 引 树 , 找 到 等 于 x i a o m i n g 4 5 6 @ x y z . c o m 的 记 录 , 取 出 主 键 的 值 i d 2 根 据 主 键 值 i d 2 回 表 查 询 , 把 记 录 放 入 返 回 结 果 集 中 再 接 着 向 右 移 动 , 发 现 记 录 不 符 , 返 回 , 查 询 结 束 , 把 结 果 集 返 回 客 户 端 i n d e x 2 索 引 查 询 过 程 搜 索 i n d e x 2 索 引 树 , 找 到 等 于 x i a o m 的 记 录 ( 取 前 5 位 进 行 查 询 ) , 取 出 主 键 的 值 i d 1 根 据 主 键 值 i d 1 回 表 查 询 , 发 现 e m a i l 值 不 等 于 x i a o m i n g 4 5 6 @ x y z . c o m 再 接 着 向 右 移 动 , 发 现 等 于 x i a o m , 取 出 主 键 的 值 i d 2 根 据 主 键 值 i d 2 回 表 查 询 , 发 现 e m a i l 值 等 于 x i a o m i n g 4 5 6 @ x y z . c o m , 放 入 返 回 结 果 集 重 复 以 上 过 程 , 直 到 遇 到 z h a n g 时 , 查 询 结 束 使 用 前 缀 索 引 i n d e x 2 一 共 需 要 查 找 4 次 , 增 加 了 扫 描 的 次 数 。 但 如 果 把 前 缀 索 引 设 置 为 e m a i l ( 9 ) , 也 只 需 要 查 找 一 次 , 因 为 等 于 x i a o m i n g 4 只 有 一 条 , 找 到 后 查 询 也 结 束 了 。 通 过 选 择 适 当 的 前 缀 索 引 的 长 度 , 即 节 省 空 间 , 查 询 成 本 也 不 会 太 高 覆 盖 索 引 无 效 同 样 是 查 询 s e l e c t i d , e m a i l f r o m u s e r s w h e r e e m a i l = x i a o m i n g 4 5 6 @ x y z . c o m ; 如 果 在 e m a i l 上 建 立 普 通 索 引 , 在 找 到 记 录 后 , 由 于 索 引 包 含 了 i d 的 值 , 不 用 回 表 , 直 接 返 回 结 果 即 可 如 果 在 e m a i l 上 建 立 前 缀 索 引 , 在 找 到 记 录 后 , 由 于 索 引 信 息 不 完 整 , 即 使 包 含 了 i d 的 值 , 也 需 要 回 表 查 询 是 否 与 e m a i l 的 完 整 值 相 匹 配 这 样 就 导 致 了 在 前 缀 索 引 上 , 无 法 使 用 覆 盖 索 引 对 查 询 性 能 的 优 化 H a s h 字 段 比 如 对 身 份 证 进 行 查 询 , 其 长 度 为 1 8 位 , 直 接 建 立 索 引 会 占 用 较 多 的 空 间 , 如 果 使 用 前 缀 索 引 只 取 前 几 位 但 相 同 的 概 率 很 大 , 取 太 长 又 不 能 节 省 空 间 , 此 时 可 以 添 加 一 个 字 段 , 用 来 存 放 身 份 证 的 h a s h 值 , 并 为 这 个 h a s h 字 段 建 立 索 引 a l t e r t a b l e t a d d i d c a r d _ h a s h i n t u n s i g n e d , a d d i n d e x ( i d c a r d _ h a s h ) ; 索 引 的 长 度 变 成 了 4 个 字 节 , 就 算 算 上 h a s h 字 段 本 身 占 用 的 空 间 , 也 要 比 原 来 小 了 很 多 。 由 于 h a s h 值 存 在 冲 突 , 在 查 询 时 还 要 加 上 身 份 证 字 段 , 确 保 精 确 匹 配 以 取 到 正 确 的 记 录 , 这 样 就 可 以 即 节 省 空 间 , 又 高 效 的 查 询 了 s e l e c t * f r o m t w h e r e i d c a r d _ h a s h = h a s h _ a l g o r i t h m ( i n p u t _ i d _ c a r d _ s t r i n g ) a n d i d _ c a r d = i n p u t _ i d _ c a r d _ s t r i n g h a s h 字 段 的 缺 点 不 能 进 行 范 围 查 询 使 用 h a s h 函 数 会 消 耗 C P U 这 里 其 实 还 有 一 个 思 路 , 把 身 份 证 倒 序 存 储 , 这 样 就 不 用 额 外 再 建 立 字 段 , 同 时 可 以 使 用 前 缀 索 引 , 但 至 少 要 用 前 8 位 来 建 立 前 缀 索 引 , 即 8 字 节 , 其 占 用 空 间 和 使 用 h a s h 字 段 就 差 不 多 了 , 因 为 是 前 缀 索 引 , 必 定 要 回 表 查 询 , 增 加 了 扫 描 次 数 , 查 询 性 能 也 有 没 h a s h 字 段 稳 定 , 况 且 8 位 应 该 是 不 够 的 , 占 用 空 间 肯 定 要 比 使 用 h a s h 字 段 要 大 。 小 结 直 接 创 建 完 整 索 引 , 这 样 可 能 比 较 占 用 空 间 创 建 前 缀 索 引 , 节 省 空 间 , 但 会 增 加 查 询 扫 描 次 数 , 并 且 不 能 使 用 覆 盖 索 引 倒 序 存 储 , 再 创 建 前 缀 索 引 , 用 于 绕 过 字 符 串 本 身 前 缀 的 区 分 度 不 够 的 问 题 创 建 h a s h 字 段 索 引 , 查 询 性 能 稳 定 , 有 额 外 的 存 储 和 计 算 消 耗 , 跟 第 三 种 方 式 一 样 , 都 不 支 持 范 围 扫 描 m y s q l 自 增 值 规 则 P o s t e d o n 2 0 2 1 1 1 1 5 I n m y s q l A u t o _ i n c r e m e n t 表 结 构 如 下 , 且 假 设 当 前 系 统 中 只 有 一 个 连 接 C R E A T E T A B L E ` t ` ( ` i d ` i n t N O T N U L L A U T O _ I N C R E M E N T , ` a ` i n t D E F A U L T N U L L , ` b ` i n t D E F A U L T N U L L , P R I M A R Y K E Y ( ` i d ` ) , K E Y ` a ` ( ` a ` ) , K E Y ` b ` ( ` b ` ) ) E N G I N E = I n n o D B ; 建 表 时 把 主 键 i d 设 置 为 i d i n t ( 1 1 ) N O T N U L L A U T O _ I N C R E M E N , 在 插 入 数 据 时 , 如 果 不 指 定 i d , 系 统 会 为 i d 自 动 设 置 值 , 并 把 A u t o _ i n c r e m e n t 的 值 , 作 为 下 一 条 记 录 i d 的 值 i n s e r t i n t o t ( a , b ) v a l u e s ( 1 , 1 ) ; s e l e c t * f r o m t ; + + + + | i d | a | b | + + + + | 2 0 0 0 0 1 | 1 | 1 | + + + + s h o w t a b l e s t a t u s l i k e t \ \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 . r o w * * * * * * * * * * * * * * * * * * * * * * * * * * * I n d e x _ l e n g t h : 3 2 7 6 8 D a t a _ f r e e : 1 0 4 8 5 7 6 0 A u t o _ i n c r e m e n t : 2 0 0 0 0 2 再 插 入 时 如 果 没 有 指 定 i d , 则 使 用 2 0 0 0 0 2 作 为 其 值 , A u t o _ i n c r e m e n t 的 值 更 新 为 2 0 0 0 0 3 i n s e r t i n t o t ( a , b ) v a l u e s ( 1 , 1 ) ; + + + + | i d | a | b | + + + + | 2 0 0 0 0 1 | 1 | 1 | | 2 0 0 0 0 2 | 1 | 1 | + + + + s h o w t a b l e s t a t u s l i k e t \ \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 . r o w * * * * * * * * * * * * * * * * * * * * * * * * * * * I n d e x _ l e n g t h : 3 2 7 6 8 D a t a _ f r e e : 1 0 4 8 5 7 6 0 A u t o _ i n c r e m e n t : 2 0 0 0 0 3 如 果 把 i d = 2 0 0 0 0 1 记 录 删 除 , 然 后 指 定 i d 的 值 为 2 0 0 0 0 1 , 插 入 这 样 一 条 记 录 , 那 么 A u t o _ i n c r e m e n t 的 值 不 增 长 , 依 然 为 2 0 0 0 0 3 。 同 时 可 以 看 到 , 由 于 默 认 是 主 键 索 引 排 序 , 即 使 i d = 2 0 0 0 0 1 被 删 除 后 , 再 次 插 入 , 也 排 在 了 2 0 0 0 0 2 的 前 面 d e l e t e f r o m t w h e r e i d = 2 0 0 0 0 1 ; i n s e r t i n t o t ( i d , a , b ) v a l u e s ( 2 0 0 0 0 1 , 2 0 0 0 0 1 , 2 0 0 0 0 1 ) ; s e l e c t * f r o m t ; + + + + | i d | a | b | + + + + | 2 0 0 0 0 1 | 2 0 0 0 0 1 | 2 0 0 0 0 1 | | 2 0 0 0 0 2 | 1 | 1 | + + + + s h o w t a b l e s t a t u s l i k e t \ \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 . r o w * * * * * * * * * * * * * * * * * * * * * * * * * * * I n d e x _ l e n g t h : 3 2 7 6 8 D a t a _ f r e e : 1 0 4 8 5 7 6 0 A u t o _ i n c r e m e n t : 2 0 0 0 0 3 再 插 入 一 条 记 录 也 可 以 验 证 , 新 记 录 的 i d 值 为 2 0 0 0 0 3 。 i n s e r t i n t o t ( a , b ) v a l u e s ( 1 , 1 ) ; s e l e c t * f r o m t ; + + + + | i d | a | b | + + + + | 2 0 0 0 0 1 | 2 0 0 0 0 1 | 2 0 0 0 0 1 | | 2 0 0 0 0 2 | 1 | 1 | | 2 0 0 0 0 3 | 1 | 1 | + + + + 还 可 以 手 动 插 入 一 个 不 连 续 的 i d : 2 0 0 0 0 6 i n s e r t i n t o t ( i d , a , b ) v a l u e s ( 2 0 0 0 0 6 , 1 , 1 ) ; 此 时 A u t o _ i n c r e m e n t 的 值 为 2 0 0 0 0 7 , 如 果 插 入 i d 比 它 小 的 值 , 则 A u t o _ i n c r e m e n t r 的 值 不 增 长 , 依 然 为 2 0 0 0 0 7 i n s e r t i n t o t ( i d , a , b ) v a l u e s ( 2 0 0 0 0 5 , 1 , 1 ) ; s e l e c t * f r o m t ; + + + + | i d | a | b | + + + + | 2 0 0 0 0 1 | 2 0 0 0 0 1 | 2 0 0 0 0 1 | | 2 0 0 0 0 2 | 1 | 1 | | 2 0 0 0 0 3 | 1 | 1 | | 2 0 0 0 0 5 | 1 | 1 | | 2 0 0 0 0 6 | 1 | 1 | + + + + s h o w t a b l e s t a t u s l i k e t \ \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1 . r o w * * * * * * * * * * * * * * * * * * * * * * * * * * * I n d e x _ l e n g t h : 3 2 7 6 8 D a t a _ f r e e : 1 0 4 8 5 7 6 0 A u t o _ i n c r e m e n t : 2 0 0 0 0 7 在 以 上 操 作 中 , 如 果 通 过 s h o w t a b l e s t a t u s l i k e 查 看 A u t o _ i n c r e m e n t 的 值 没 有 变 化 , 运 行 a n a l y z e t a b l e t 手 动 更 新 表 的 统 计 信 息 后 再 查 看 m y s q l l i m i t 的 妙 用 P o s t e d o n 2 0 2 1 0 9 0 4 I n m y s q l 更 新 无 索 引 的 列 , 会 导 致 全 表 被 锁 , 其 它 线 程 无 法 更 新 表 中 的 数 据 , 如 果 加 入 了 l i m i t N 关 键 字 , 可 以 减 少 被 锁 定 的 行 , 在 一 定 程 度 上 可 以 提 高 并 发 表 结 构 及 数 据 如 下 c r e a t e t a b l e ` t ` ( ` i d ` i n t n o t n u l l p r i m a r y k e y , ` n a m e ` v a r c h a r ( 3 2 ) d e f a u l t n u l l , ` a g e ` i n t d e f a u l t n u l l , ` i s m a l e ` t i n y i n t d e f a u l t n u l l ) e n g i n e = i n n o d b ; i n s e r t i n t o t v a l u e s ( 1 , d 0 0 1 , 3 0 , 1 ) , ( 3 , d 0 0 3 , 3 0 , 1 ) ; i n s e r t i n t o t v a l u e s ( 5 , d 0 0 5 , 3 0 , 1 ) , ( 7 , d 0 0 7 , 3 0 , 1 ) ; i n s e r t i n t o t v a l u e s ( 9 , d 0 0 9 , 3 0 , 1 ) , ( 1 1 , d 0 1 1 , 3 0 , 1 ) ; s e l e c t * f r o m t ; + + + + + | i d | n a m e | a g e | i s m a l e | + + + + + | 1 | d 0 0 1 | 3 0 | 1 | | 3 | d 0 0 3 | 3 0 | 1 | | 5 | d 0 0 5 | 3 0 | 1 | | 7 | d 0 0 7 | 3 0 | 1 | | 9 | d 0 0 9 | 3 0 | 1 | | 1 1 | d 0 1 1 | 3 0 | 1 | + + + + + 不 加 入 l i m i t 锁 全 表 时 刻 S e s s i o n A S e s s i o n B T 1 b e g i n ; u p d a t e t s e t a g e = 3 1 w h e r e n a m e = ’ d 0 0 3 ’ ; T 2 B e g i n ; u p d a t e t s e t a g e = 3 1 w h e r e n a m e = ’ d 0 0 5 ’ ; ( b l o c k e d ) u p d a t e t s e t a g e = 3 1 w h e r e i d = 5 ; ( b l o c k e d ) i n s e r t i n t o t v a l u e s ( 2 , ’ d 0 0 2 ’ , 3 0 , 1 ) ; ( b l o c k e d ) i n s e r t i n t o t v a l u e s ( 1 2 , ’ d 0 1 2 ’ , 3 0 , 1 ) ; ( b l o c k e d ) S e s s i o n A 的 加 锁 范 围 主 键 索 引 i d 锁 的 范 围 是 [ i n f i m u m , s u p r e m u m ] 由 于 n a m e 列 没 有 索 引 , w h e r e n a m e = d 0 0 3 查 询 时 走 主 键 索 引 , 全 表 扫 描 。 先 找 到 i d = 1 的 行 , 加 n e x t k e y 锁 , 发 现 n a m e 的 值 不 匹 配 , 继 续 向 右 查 找 , 给 i d = 3 的 行 上 锁 , n a m e 匹 配 , 返 回 结 果 给 s e r v e r 层 , 然 后 继 续 向 右 查 找 直 到 最 后 一 行 i d = 1 1 , 查 找 过 程 中 涉 及 到 的 行 都 被 加 了 n e x t k e y 锁 ( i d = 5 , 7 , 9 , 1 1 的 行 ) , 由 于 事 务 没 有 提 交 , 这 些 行 锁 没 有 被 释 放 。 S e s s i o n B 被 阻 塞 在 哪 里 更 新 条 件 w h e r e n a m e = d 0 0 5 , 由 于 n a m e 列 没 有 索 引 , 查 询 时 也 要 走 主 键 索 引 。 先 找 到 i d = 1 的 行 , 加 n e x t k e y 锁 , 由 于 S e s s i o n A 已 经 加 了 n e x t k e y 锁 , S e s s i o n B 只 能 等 待 , 它 在 此 时 发 生 了 阻 塞 u p d a t e t s e t a g e = 3 1 w h e r e n a m e = d 0 0 5 # 被 S e s s i o n A 上 的 i d = 1 的 行 的 n e x t k e y 锁 阻 塞 R E C O R D L O C K S s p a c e i d 5 p a g e n o 4 n b i t s 8 0 i n d e x P R I M A R Y o f t a b l e ` t ` t r x i d 4 3 6 6 l o c k _ m o d e X w a i t i n g 0 : l e n 4 ; h e x 8 0 0 0 0 0 0 1 ; a s c 1 : l e n 6 ; h e x 0 0 0 0 0 0 0 0 0 d 9 8 ; a s c 2 : l e n 7 ; h e x 8 1 0 0 0 0 0 0 a 7 0 1 1 0 ; a s c 3 : l e n 4 ; h e x 6 4 3 0 3 0 3 1 ; a s c d 0 0 1 4 : l e n 4 ; h e x 8 0 0 0 0 0 1 e ; a s c 5 : l e n 1 ; h e x 8 1 ; a s c 通 过 I d = 5 更 新 也 会 被 S e s s i n A 的 n e x t k e y 锁 阻 塞 , 虽 然 S e s s i o n B 加 要 的 是 行 锁 , 这 也 从 则 面 说 明 了 n e x t k e y 是 由 行 锁 和 间 隙 锁 组 成 u p d a t e t s e t a g e = 3 1 w h e r e i d = 5 # 被 i d = 5 的 记 录 上 行 锁 阻 塞 R E C O R D L O C K S s p a c e i d 5 p a g e n o 4 n b i t s 8 0 i n d e x P R I M A R Y o f t a b l e ` t ` t r x i d 4 3 6 7 l o c k _ m o d e X l o c k s r e c b u t n o t g a p w a i t i n g 0 : l e n 4 ; h e x 8 0 0 0 0 0 0 5 ; a s c 1 : l e n 6 ; h e x 0 0 0 0 0 0 0 0 0 d 9 e ; a s c 2 : l e n 7 ; h e x 8 2 0 0 0 0 0 0 a 8 0 1 1 0 ; a s c 3 : l e n 4 ; h e x 6 4 3 0 3 0 3 4 ; a s c d 0 0 4 4 : l e n 4 ; h e x 8 0 0 0 0 0 1 e ; a s c 5 : l e n 1 ; h e x 8 1 ; a s c 插 入 数 据 也 被 阻 塞 , 因 为 插 入 I d 的 值 都 落 在 了 间 隙 锁 [ i n f i m u m , s u p r e m u m ] 内 , 无 法 插 入 任 何 的 值 。 i n s e r t i n t o t v a l u e s ( 2 , d 0 0 2 , 3 0 , 1 ) ; # 插 入 i d = 2 的 值 , 被 间 隙 锁 ( 1 , 3 ) 阻 塞 R E C O R D L O C K S s p a c e i d 5 p a g e n o 4 n b i t s 8 0 i n d e x P R I M A R Y o f t a b l e ` t ` t r x i d 4 3 6 5 l o c k _ m o d e X l o c k s g a p b e f o r e r e c i n s e r t i n t e n t i o n w a i t i n g 0 : l e n 4 ; h e x 8 0 0 0 0 0 0 3 ; a s c 1 : l e n 6 ; h e x 0 0 0 0 0 0 0 0 1 1 0 6 ; a s c 2 : l e n 7 ; h e x 0 1 0 0 0 0 0 1 1 2 0 4 8 8 ; a s c 3 : l e n 4 ; h e x 6 4 3 0 3 0 3 3 ; a s c d 0 0 3 4 : l e n 4 ; h e x 8 0 0 0 0 0 1 f ; a s c 5 : l e n 1 ; h e x 8 1 ; a s c 加 入 l i m i t 减 少 被 锁 的 行 时 刻 S e s s i o n A S e s s i o n B T 1 b e g i n ; T 2 u p d a t e t s e t a g e = 3 1 w h e r e n a m e = ’ d 0 0 3 ’ l i m i t 1 ; T 3 b e g i n ; T 4 u p d a t e t s e t a g e = 3 1 w h e r e n a m e = ’ d 0 0 5 ’ ; ( b l o c k e d ) i n s e r t i n t o t v a l u e s ( 2 , ’ d 0 0 2 ’ , 3 0 , 1 ) ; ( b l o c k e d ) T 5 i n s e r t i n t o t v a l u e s ( 4 , ’ d 0 0 4 ’ , 3 0 , 1 ) ; ( Q u e r y O k ) S e s s i o n A 加 锁 的 范 围 是 怎 么 样 的 主 键 索 引 i d 锁 的 范 围 是 [ i n f i m u m , 3 ] 由 于 n a m e 列 没 有 索 引 , 查 询 时 走 主 键 索 引 , 全 表 扫 描 。 先 找 到 i d = 1 的 行 , 加 n e x t k e y 锁 , 发 现 n a m e 的 值 不 匹 配 , 继 续 向 右 查 找 , 给 i d = 3 的 行 上 锁 , n a m e 匹 配 , 返 回 结 果 给 s e r v e r 层 , 由 于 使 用 了 l i m i t 1 , 满 足 条 件 , 不 再 向 后 查 找 , 查 询 结 束 。 记 录 ( i d : 1 ) , ( i d : 3 ) 的 行 上 了 n e x t k e y 锁 , 之 后 的 记 录 没 有 上 锁 。 S e s s i o n B 被 阻 塞 在 哪 里 更 新 条 件 w h e r e n a m e = d 0 0 5 , 由 于 n a m e 列 没 有 索 引 , 查 询 时 也 要 走 主 键 索 引 。 先 找 到 i d = 1 的 行 , 加 n e x t k e y 锁 , 由 于 S e s s i o n A 已 经 加 了 n e x t k e y 锁 , S e s s i o n B 只 能 等 待 , 它 在 此 时 发 生 了 阻 塞 u p d a t e t s e t a g e = 3 1 w h e r e n a m e = d 0 0 5 # 被 S e s s i o n A 上 的 i d = 1 的 行 的 n e x t k e y 锁 阻 塞 R E C O R D L O C K S s p a c e i d 5 p a g e n o 4 n b i t s 8 0 i n d e x P R I M A R Y o f t a b l e ` t ` t r x i d 4 8 7 1 l o c k _ m o d e X w a i t i n g 0 : l e n 4 ; h e x 8 0 0 0 0 0 0 1 ; a s c 1 : l e n 6 ; h e x 0 0 0 0 0 0 0 0 0 d 9 8 ; a s c 2 : l e n 7 ; h e x 8 1 0 0 0 0 0 0 a 7 0 1 1 0 ; a s c 3 : l e n 4 ; h e x 6 4 3 0 3 0 3 1 ; a s c d 0 0 1 4 : l e n 4 ; h e x 8 0 0 0 0 0 1 e ; a s c 5 : l e n 1 ; h e x 8 1 ; a s c 因 为 i d 锁 的 范 围 是 [ i n f i m u m , 3 ] , ( i d = 5 , 7 , 9 , 1 1 ) 的 行 没 有 被 上 锁 , 可 以 更 新 及 插 入 i d > 3 的 数 据 。 # S e s s i o n B i n s e r t i n t o t v a l u e s ( 4 , d 0 0 4 , 3 0 , 1 ) ; ( Q u e r y O k ) # 虽 然 不 能 通 过 w h e r e n a m e = d 0 0 5 修 改 # 但 可 以 通 过 w h e r e i d = 5 修 改 , 也 说 明 了 i d = 5 的 行 没 有 被 锁 # 同 时 也 绕 过 了 需 要 等 待 i d = 1 的 锁 的 限 制 u p d a t e t s e t a g e = 3 1 w h e r e i d = 5 ; ( Q u e r y O k ) s e l e c t * f r o m t ; + + + + + | i d | n a m e | a g e | i s m a l e | + + + + + | 1 | d 0 0 1 | 3 0 | 1 | | 3 | d 0 0 3 | 3 0 | 1 | | 4 | d 0 0 4 | 3 0 | 1 | | 5 | d 0 0 5 | 3 1 | 1 | | 7 | d 0 0 7 | 3 0 | 1 | | 9 | d 0 0 9 | 3 0 | 1 | | 1 1 | d 0 1 1 | 3 0 | 1 | + + + + + m y s q l 死 锁 P o s t e d o n 2 0 2 1 0 8 2 5 I n m y s q l 死 锁 的 发 生 不 同 线 程 出 现 资 源 的 循 环 依 赖 , 都 在 等 待 对 方 释 放 自 己 所 需 要 的 资 源 , 就 会 导 致 这 几 个 线 程 进 行 无 限 等 待 的 状 态 , 发 生 死 锁 。 事 务 A 事 务 B B e g i n ; B e g i n ; u p d a t e t s e t k = k + 1 w h e r e i d = 1 ; u p d a t e t s e t k = k + 1 w h e r e i d = 2 ; u p d a t e t s e t k = k + 1 w h e r e i d = 2 ; ( b l o c k ) u p d a t e t s e t k = k + 1 w h e r e i d = 1 ; D e a d l o c k f o u n d w h e n t r y i n g t o g e t l o c k ; t r y r e s t a r t i n g t r a n s a c t i o n Q u e r y O K , 1 r o w a f f e c t e d ( 6 . 9 9 s e c ) R o w s m a t c h e d : 1 C h a n g e d : 1 W a r n i n g s : 0 事 务 A 在 等 待 事 物 B 释 放 i d = 2 的 行 锁 , 而 事 务 B 在 等 待 事 物 A 释 放 i d = 1 的 行 锁 , 双 方 都 在 等 待 对 方 释 放 资 源 , 就 发 生 了 死 锁 。 由 于 M y S Q L 有 死 锁 检 测 , 会 马 上 发 现 这 个 死 锁 , 并 对 事 务 B 进 行 回 滚 。 发 生 死 锁 的 线 程 都 是 要 锁 至 少 2 行 ( 参 与 的 有 2 个 资 源 , 一 个 资 源 是 自 己 已 经 加 锁 , 但 别 人 也 要 加 , 另 一 个 资 源 是 别 人 已 经 加 锁 , 但 自 己 也 要 加 ) 。 如 果 一 个 事 务 只 锁 一 行 是 不 会 发 生 死 锁 的 , 只 会 发 生 锁 阻 塞 。 应 对 策 略 什 么 都 不 做 , 直 接 等 到 超 时 上 面 的 事 务 B , 会 发 生 超 时 。 通 过 设 置 i n n o d b _ l o c k _ w a i t _ t i m e o u t 来 指 定 超 时 时 间 , 默 认 值 是 5 0 s s h o w v a r i a b l e s l i k e % i n n o d b _ l o c k _ w a i t _ t i m e o u t % ; + + + | V a r i a b l e _ n a m e | V a l u e | + + + | i n n o d b _ l o c k _ w a i t _ t i m e o u t | 5 0 | + + + 进 行 死 锁 检 测 开 启 死 锁 检 测 功 能 , 检 测 到 死 锁 后 , 对 回 滚 成 本 比 较 低 的 事 务 进 行 回 滚 , 让 其 它 事 务 继 续 执 行 。 设 置 参 数 i n n o d b _ d e a d l o c k _ d e t e c t 为 o n , 开 启 此 功 能 ( 默 认 为 开 启 ) + + + | V a r i a b l e _ n a m e | V a l u e | + + + | i n n o d b _ d e a d l o c k _ d e t e c t | O N | + + + 哪 种 策 略 更 好 缩 短 等 待 的 超 时 时 间 i n n o d b _ l o c k _ w a i t _ t i m e o u t 的 默 认 等 待 为 5 0 秒 , 对 于 生 产 环 境 , 这 显 然 是 无 法 接 受 的 。 如 果 设 置 为 1 秒 呢 , 虽 然 等 待 的 时 间 变 短 , 但 也 会 误 伤 那 些 只 是 等 待 锁 , 而 不 是 陷 入 死 锁 的 线 程 。 比 如 2 秒 以 后 就 可 以 拿 到 锁 的 那 些 线 程 。 启 用 死 锁 检 测 M y S q l 默 认 启 用 死 锁 检 测 , 当 发 现 加 入 进 来 的 线 程 会 产 生 死 锁 时 , 会 回 滚 成 本 较 低 的 事 务 。 M y S Q L 发 现 死 锁 的 速 度 很 快 , 所 以 推 荐 使 用 死 锁 检 测 关 闭 死 锁 检 测 如 果 可 以 确 定 所 有 的 S Q L 不 会 产 生 死 锁 问 题 , 可 以 关 闭 死 锁 检 测 。 死 锁 检 测 虽 然 好 使 , 但 也 是 有 代 价 的 , 会 占 用 C P U 的 资 源 。 死 锁 检 测 的 成 本 当 一 个 线 程 新 加 入 到 某 个 资 源 的 阻 塞 队 列 时 , 会 检 测 它 的 加 入 是 否 与 其 它 正 在 发 生 阻 塞 的 线 程 存 在 资 源 的 相 互 依 赖 , 从 而 导 致 死 锁 的 发 生 。 如 果 这 是 一 个 高 并 发 的 资 源 , 阻 塞 队 列 里 有 大 量 排 队 的 线 程 , 那 么 每 个 线 程 都 要 把 其 它 线 程 检 查 一 遍 , 每 个 线 程 要 检 查 的 时 间 复 杂 度 就 是 O ( N ) 。 比 如 有 1 0 0 0 个 并 发 线 程 , 那 么 要 总 共 要 检 测 的 数 量 就 是 1 0 0 0 * 1 0 0 0 = 1 0 0 W , 即 O ( N ^ 2 ) , 这 种 数 量 级 的 检 测 就 会 导 致 消 耗 大 量 的 C P U 资 源 , 你 看 到 的 现 象 就 是 C P U 占 用 率 很 高 , 却 处 理 不 了 多 少 事 务 , 或 是 你 发 现 理 处 的 事 务 很 少 , 但 C P U 占 用 率 却 很 高 。 控 制 并 发 度 要 想 从 根 本 上 减 少 死 锁 及 锁 等 待 , 就 要 降 低 对 同 一 资 源 的 并 发 访 问 数 量 可 以 使 用 的 方 法 分 摊 热 点 资 源 的 访 问 量 比 如 参 加 秒 杀 的 商 品 , 它 的 库 存 如 果 存 放 在 一 条 记 录 中 , 那 么 在 高 并 发 下 , 比 如 有 1 0 0 0 个 请 求 , 就 会 同 时 更 新 , 这 样 就 会 导 致 线 程 的 阻 塞 或 发 生 死 锁 。 可 以 把 保 存 库 存 的 记 录 一 条 拆 成 N 条 , 让 请 求 随 机 访 问 这 N 条 记 录 , 比 如 分 别 放 在 1 0 0 个 记 录 中 , 那 么 每 个 记 录 最 多 只 有 1 0 个 更 新 请 求 , 这 样 可 以 把 并 发 量 降 为 原 来 的 1 / N , 大 大 减 小 了 死 锁 的 发 生 和 锁 的 等 待 , 以 及 死 锁 检 测 的 成 本 把 并 发 请 求 放 入 队 列 数 据 库 中 间 件 可 以 把 请 求 放 入 队 列 , 使 并 发 请 求 变 为 顺 序 访 问 m y s q l 事 务 中 多 条 S Q L 的 排 序 P o s t e d o n 2 0 2 1 0 8 1 8 I n m y s q l 场 景 : 用 户 购 买 商 品 A , 对 应 的 S Q L 如 下 商 品 A 库 存 减 1 ( S Q L 1 ) 用 户 购 买 商 品 A , 扣 减 用 户 金 额 ( S Q L 2 ) 插 入 一 条 交 易 日 志 ( S Q L 3 ) 这 三 个 操 作 为 原 子 操 作 , 所 以 要 写 在 一 个 事 务 中 。 如 果 有 大 量 用 户 购 买 商 品 A , 则 商 品 A 库 存 减 1 为 热 点 数 据 , 被 频 繁 更 新 。 假 设 每 条 S Q L 的 执 行 时 间 为 5 秒 , 则 整 个 事 务 的 执 行 时 间 为 1 5 秒 , 由 于 有 大 量 用 户 购 买 , 那 么 不 同 的 执 行 顺 序 将 会 影 响 最 终 的 执 行 时 间 , 从 而 影 响 并 发 把 商 品 A 库 存 减 1 ( S Q L 1 ) 放 在 首 行 ( 情 况 1 ) 时 刻 事 务 A 事 务 B 耗 时 T 1 商 品 A 库 存 减 1 ( S Q L 1 ) 商 品 A 库 存 减 1 ( S Q L 1 ) 发 生 等 待 , 不 能 执 行 , 直 到 T 4 时 刻 5 s T 2 用 户 购 买 商 品 A , 扣 减 用 户 金 额 ( S Q L 2 ) 5 s T 3 插 入 一 条 交 易 日 志 ( S Q L 3 ) 5 s T 4 商 品 A 库 存 减 1 ( S Q L 1 ) 5 s T 5 用 户 购 买 商 品 A , 扣 减 用 户 金 额 ( S Q L 2 ) 5 s T 6 插 入 一 条 交 易 日 志 ( S Q L 3 ) 5 s T 1 时 刻 , 事 务 A 执 行 商 品 A 库 存 减 1 , 给 其 上 锁 , 直 到 事 务 提 交 ( 1 5 秒 以 后 ) 同 时 事 务 B 也 执 行 商 品 A 库 存 减 1 , 被 阻 塞 , 发 生 锁 等 待 , 这 使 得 后 面 的 S q l 2 , s q l 2 语 句 不 能 执 行 , 直 到 1 5 s 后 , 事 务 A 提 交 数 据 。 即 T 4 时 刻 才 开 始 执 行 。 事 务 B 总 共 耗 时 3 0 秒 才 完 成 。 等 待 事 务 A 的 1 5 s ( T 1 到 T 3 ) + 自 身 的 1 5 s 如 果 把 商 品 A 库 存 减 1 ( S Q L 1 ) 放 在 最 后 , 可 以 减 少 等 待 的 时 间 ( 情 况 2 ) 时 刻 事 务 A 事 务 B 耗 时 T 1 用 户 购 买 商 品 A , 扣 减 用 户 金 额 ( S Q L 2 ) 用 户 购 买 商 品 A , 扣 减 用 户 金 额 ( S Q L 2 ) 5 s T 2 插 入 一 条 交 易 日 志 ( S Q L 3 ) 插 入 一 条 交 易 日 志 ( S Q L 3 ) 5 s T 3 商 品 A 库 存 减 1 ( S Q L 1 ) 商 品 A 库 存 减 1 ( S Q L 1 ) 发 生 等 待 , 不 能 执 行 , 直 到 T 4 时 刻 5 s T 4 商 品 A 库 存 减 1 ( S Q L 1 ) 5 s 扣 减 用 户 金 额 是 针 对 单 个 用 户 操 作 , 在 同 一 时 刻 更 新 这 些 记 录 不 太 容 易 发 生 锁 等 待 , 所 以 事 务 A 与 事 务 B 在 T 1 时 刻 可 以 同 时 进 行 插 入 一 条 交 易 日 志 也 是 可 以 同 时 进 行 的 , 所 以 事 务 A 与 事 务 B 在 T 2 时 刻 同 时 进 行 事 务 A T 3 时 刻 执 行 完 成 , 耗 时 1 5 s , 事 务 B 在 此 时 被 阻 塞 , 因 为 要 更 新 同 一 条 记 录 , 发 生 了 锁 等 待 , 需 要 等 待 5 秒 事 务 B 在 T 4 时 刻 , 执 行 完 成 , 耗 时 2 0 s ( 1 0 s + 等 待 5 s + 5 s ) 当 把 商 品 A 库 存 减 1 ( S Q L 1 ) 放 在 最 后 时 , 事 务 B 的 执 行 时 间 缩 短 到 了 2 0 s , 节 省 了 1 0 s , 大 大 提 高 了 并 发 度 。 可 以 看 出 , 锁 等 待 时 间 是 正 在 执 行 的 事 物 引 起 锁 的 语 句 到 提 交 的 时 间 间 隔 , 如 果 放 在 事 务 最 后 , 那 这 个 时 间 间 隔 会 变 为 最 少 。 对 照 上 面 的 例 子 , 情 况 1 事 务 A 从 T 1 到 T 3 时 刻 , 持 有 锁 总 共 1 5 s 。 情 况 2 , 事 务 A 只 在 T 3 时 刻 持 有 锁 , 总 共 5 s , 可 见 把 商 品 A 库 存 减 1 ( S Q L 1 ) 放 到 最 后 时 , 大 大 减 少 了 时 间 间 隔 。 通 过 减 少 事 务 持 有 锁 的 时 间 , 大 程 度 的 减 少 了 事 务 之 间 的 锁 等 待 , 提 高 了 并 发 度 。 所 以 通 常 的 做 法 是 把 热 点 更 新 语 句 放 到 事 务 的 最 后 , 这 样 当 事 务 结 束 后 , 热 点 语 句 的 锁 可 以 被 马 上 释 放 , 减 少 事 务 锁 持 有 的 时 间 , 其 它 事 务 等 待 锁 释 放 的 时 间 就 会 变 短 , 从 而 使 并 发 度 得 到 了 提 高 。 g o 语 言 程 序 性 能 剖 析 P o s t e d o n 2 0 2 1 0 8 1 5 I n g o l a n g 用 途 对 程 序 性 能 进 行 剖 析 , 可 以 找 到 性 能 的 瓶 颈 、 b u g 、 以 及 对 程 序 进 行 有 目 标 的 优 化 , 从 而 提 高 程 序 的 性 能 , 解 决 程 序 中 存 在 的 问 题 。 如 何 对 程 序 进 行 剖 析 设 置 要 分 析 的 指 标 , 利 用 工 具 ( g o t e s t ) 或 性 能 指 标 A P I 对 指 标 进 行 剖 析 , 生 成 对 应 的 概 要 文 件 ( 二 进 制 文 件 ) 使 用 分 析 工 具 ( g o t o o l p p r o f / g o t o o l t r a c e ) 对 概 要 文 件 进 行 解 析 , 得 到 性 能 指 标 值 的 具 体 信 息 , 这 些 信 息 可 以 以 文 本 , 图 形 的 形 式 展 示 。 根 据 得 到 性 能 指 标 值 的 具 体 信 息 , 分 析 程 序 性 能 , 查 找 程 序 瓶 颈 或 对 程 序 进 行 优 化 要 对 一 个 程 序 进 行 剖 析 , 必 须 先 生 成 对 应 指 标 的 概 要 文 件 , 然 后 再 用 分 析 工 具 去 解 析 这 个 概 要 文 件 概 要 文 件 是 G o 程 序 在 某 一 段 时 间 内 , 对 相 关 指 标 采 样 后 , 得 到 的 概 要 信 息 。 剖 析 时 , 会 在 程 序 执 行 期 间 进 行 一 些 自 动 抽 样 , 在 结 束 时 进 行 推 断 , 最 后 把 统 计 结 果 保 存 为 概 要 文 件 , 供 分 析 工 具 使 用 。 概 要 文 件 的 格 式 概 要 文 件 其 实 就 是 由 p r o t o c o l b u f f e r s 生 成 的 二 进 制 数 据 流 , p r o t o c o l b u f f e r s 是 一 种 数 据 序 列 化 协 议 , 它 定 义 了 程 序 对 象 如 m a p , 结 构 体 , 数 组 等 与 字 节 之 间 如 何 相 互 转 化 。 同 时 p r o t o c o l b u f f e r s 不 仅 仅 是 协 议 , 也 可 以 作 为 转 化 工 具 来 使 用 , 它 可 以 把 字 节 流 转 化 为 对 象 , 也 可 以 把 对 象 转 化 为 字 节 流 。 p r o t o c o l b u f f e r s 会 对 生 成 的 字 节 流 进 行 压 缩 , 它 的 体 积 比 ( J S O N , X M L ) 都 要 更 小 , 所 以 也 更 适 合 用 于 数 据 在 网 上 传 输 生 成 概 要 文 件 的 方 法 G o 语 言 支 持 多 种 类 型 的 性 能 分 析 , 可 以 通 过 使 用 g o t e s t 配 合 对 应 的 标 识 符 使 用 性 能 指 标 A P I 这 两 种 方 式 , 都 可 以 生 成 概 要 文 件 有 关 性 能 的 概 要 文 件 C P U 概 要 文 件 , 内 存 概 要 文 件 , 阻 塞 概 要 文 件 , 它 们 可 以 通 过 g o t e s t 配 合 对 应 的 标 识 符 生 成 , 对 C P U , 内 存 , 阻 塞 这 三 个 指 标 进 行 分 析 。 G o t e s t 标 识 生 成 概 要 文 件 可 以 使 用 g o t e s t 工 具 提 供 的 剖 析 标 识 对 程 序 进 行 分 析 , 生 成 概 要 文 件 。 不 要 让 多 个 剖 析 标 识 同 时 运 行 , 它 们 之 间 会 相 互 影 响 , 导 致 分 析 结 果 不 准 确 C p u 剖 析 标 识 记 录 占 用 C P U 时 间 最 长 的 函 数 , 每 个 运 行 在 C P U 上 的 函 数 每 几 毫 秒 都 会 遇 到 系 统 中 断 事 件 , 每 次 中 断 时 , 都 会 记 录 一 个 剖 析 数 据 g o t e s t g o t t / f i b c p u p r o f i l e = c p u . l o g r u n = N o n e b e n c h = F i b W i t h M a p 堆 剖 析 标 识 记 录 最 耗 内 容 的 语 句 , 平 均 每 申 请 5 1 2 K 的 内 存 , 就 会 记 录 一 个 剖 析 数 据 g o t e s t g o t t / f i b m e m p r o f i l e = m e m . l o g r u n = N o n e b e n c h = F i b W i t h M a p 阻 塞 剖 解 标 识 记 录 阻 塞 g o r o u t i n e 最 久 的 操 作 , 如 系 统 调 用 , 等 待 锁 , 管 道 收 发 等 , 每 当 这 些 操 作 阻 塞 g o r o u t i n e 时 , 就 会 记 录 一 个 剖 析 数 据 g o t e s t g o t t / f i b b l o c k p r o f i l e = b l o c k . l o g r u n = N o n e b e n c h = F i b W i t h M a p 解 析 概 要 文 件 可 执 行 文 件 使 用 以 上 标 识 符 , 除 了 生 成 了 剖 析 数 据 日 志 ( c p u . l o g / m e m . l o g / b l o c k . l o g ) , g o t e s t 还 会 生 成 对 应 的 可 执 行 程 序 ( f i b . t e s t ) , 以 包 名 做 为 前 缀 , 后 面 为 . t e s t 的 文 件 。 为 了 减 少 剖 析 数 据 日 志 占 用 的 空 间 和 提 高 分 析 效 率 , 分 析 日 志 本 身 并 没 有 记 录 函 数 的 名 称 , 而 是 函 数 的 地 址 , 所 以 需 要 与 之 对 应 的 可 执 行 文 件 , 才 可 以 对 剖 析 日 志 进 行 数 据 分 析 p p r o f 分 析 工 具 g o t o o l p p r o f 命 令 可 以 用 来 分 析 剖 析 日 志 , 它 需 要 两 个 基 本 的 参 数 剖 析 文 件 日 志 测 试 生 成 的 可 执 行 文 件 g o t o o l p p r o f t e x t n o d e c o u n t = 1 0 . / f i b . t e s t c p u . l o g F i l e : f i b . t e s t T y p e : c p u T i m e : A u g 9 , 2 0 2 1 a t 1 1 : 3 0 a m ( C S T ) D u r a t i o n : 1 . 4 3 s , T o t a l s a m p l e s = 1 . 0 9 s ( 7 6 . 0 2 % ) S h o w i n g n o d e s a c c o u n t i n g f o r 1 . 0 9 s , 1 0 0 % o f 1 . 0 9 s t o t a l S h o w i n g t o p 1 0 n o d e s o u t o f 1 7 f l a t f l a t % s u m % c u m c u m % 0 . 4 9 s 4 4 . 9 5 % 4 4 . 9 5 % 0 . 9 4 s 8 6 . 2 4 % r u n t i m e . m a p a c c e s s 2 _ f a s t 6 4 0 . 3 6 s 3 3 . 0 3 % 7 7 . 9 8 % 0 . 3 6 s 3 3 . 0 3 % r u n t i m e . m e m h a s h 6 4 0 . 1 2 s 1 1 . 0 1 % 8 8 . 9 9 % 1 . 0 6 s 9 7 . 2 5 % g o t t / f i b . f i b W i t h M a p 0 . 0 6 s 5 . 5 0 % 9 4 . 5 0 % 0 . 0 6 s 5 . 5 0 % r u n t i m e . a d d ( p a r t i a l i n l i n e ) 0 . 0 3 s 2 . 7 5 % 9 7 . 2 5 % 0 . 0 3 s 2 . 7 5 % r u n t i m e . b u c k e t S h i f t ( i n l i n e ) 0 . 0 2 s 1 . 8 3 % 9 9 . 0 8 % 1 . 0 8 s 9 9 . 0 8 % g o t t / f i b . B e n c h m a r k F i b W i t h M a p 0 . 0 1 s 0 . 9 2 % 1 0 0 % 0 . 0 1 s 0 . 9 2 % r u n t i m e . w b B u f F l u s h 1 0 0 % 1 0 0 % 0 . 0 1 s 0 . 9 2 % r u n t i m e . ( * b m a p ) . o v e r f l o w ( i n l i n e ) 0 0 % 1 0 0 % 0 . 0 3 s 2 . 7 5 % r u n t i m e . b u c k e t M a s k ( i n l i n e ) 0 0 % 1 0 0 % 0 . 0 1 s 0 . 9 2 % r u n t i m e . f i n d r u n n a b l e . / f i b . t e s t : 测 试 生 成 的 可 执 行 文 件 , 在 一 般 的 测 试 中 , 当 测 试 完 成 后 , 文 件 就 会 被 丢 弃 , 但 在 启 用 剖 析 标 识 后 , 这 个 文 件 会 被 保 留 , 供 之 后 的 分 析 使 用 n o d e c o u n t : 限 制 分 析 结 果 输 出 的 行 数 t e x t : 指 定 输 出 的 格 式 还 可 以 使 用 w e b 选 项 , 用 于 生 成 函 数 的 有 向 图 , 标 注 有 C P U 的 使 用 和 最 热 点 的 函 数 等 信 息 g o t o o l p p r o f w e b n o d e c o u n t = 1 0 . / f i b . t e s t c p u . l o g / / 使 用 w e b 需 要 安 装 G r a p h V i z b r e w i n s t a l l g r a p h v i z 还 可 以 不 加 任 何 选 项 进 入 交 互 界 面 g o t o o l p p r o f c p u . l o g T y p e : c p u T i m e : A u g 9 , 2 0 2 1 a t 1 1 : 3 0 a m ( C S T ) D u r a t i o n : 1 . 4 3 s , T o t a l s a m p l e s = 1 . 0 9 s ( 7 6 . 0 2 % ) E n t e r i n g i n t e r a c t i v e m o d e ( t y p e h e l p f o r c o m m a n d s , o f o r o p t i o n s ) ( p p r o f ) 这 里 只 用 到 了 概 要 文 件 , 没 有 用 到 测 试 生 成 的 可 执 行 文 件 性 能 指 标 A P I 生 成 概 要 文 件 除 了 使 用 g o t e s t 标 识 对 程 序 进 行 性 能 分 析 , 还 可 以 使 用 标 准 库 中 的 r u n t i m e / p p r o f , r u n t i m e / t r a c e , n e t / h t t p / p p r o f 这 三 个 包 中 提 供 的 A P I 来 对 G o 程 序 进 行 性 能 分 析 , 生 成 概 要 文 件 。 生 成 C P U 概 要 文 件 S t a r t C P U P r o f i l e 函 数 S t a r t C P U P r o f i l e ( ) 函 数 对 C P U 信 息 进 行 定 时 采 样 生 成 概 要 文 件 , 默 认 采 样 频 率 是 1 0 0 H z , 即 每 秒 采 样 1 0 0 次 , 调 用 p p r o f . S t a r t C P U P r o f i l e ( ) 函 数 开 始 进 行 采 样 。 S t o p C P U P r o f i l e 函 数 调 用 p p r o f . S t o p C P U P r o f i l e ( ) 停 止 采 样 。 当 调 用 p p r o f . S t a r t C P U P r o f i l e ( ) 时 , 会 启 用 一 个 新 的 g o r o u t i n e , 并 在 其 中 进 行 C P U 信 息 的 收 集 f u n c S t o p C P U P r o f i l e ( ) c p u . p r o f i l i n g = f a l s e r u n t i m e . S e t C P U P r o f i l e R a t e ( 0 ) c p u . d o n e } S t o p C P U P r o f i l e 是 通 过 设 置 S e t C P U P r o f i l e R a t e ( 0 ) 为 0 , 来 停 止 采 样 的 , 而 p p r o f . S t a r t C P U P r o f i l e 是 把 r u n t i m e . S e t C P U P r o f i l e R a t e ( 1 0 0 ) 设 置 为 1 0 0 来 开 始 采 样 的 f u n c m a i n ( ) d e f e r f . C l o s e ( ) p p r o f . S t a r t C P U P r o f i l e ( f ) o p . C P U L o a d ( ) / / 耗 时 的 C P U 操 作 p p r o f . S t o p C P U P r o f i l e ( ) } p p r o f . S t a r t C P U P r o f i l e ( f ) : 把 概 要 文 件 写 入 c p u _ a p i . l o g 文 件 生 成 概 要 文 件 g o r u n p p r o f / c p u / c p u . g o g o t o o l p p r o f 查 看 概 要 文 件 内 容 g o t o o l p p r o f t e x t n o d e c o u n t = 1 5 c p u _ a p i . l o g T y p e : c p u T i m e : A u g 1 7 , 2 0 2 1 a t 3 : 5 6 p m ( C S T ) D u r a t i o n : 1 . 6 2 s , T o t a l s a m p l e s = 1 . 4 7 s ( 9 0 . 6 6 % ) S h o w i n g n o d e s a c c o u n t i n g f o r 1 . 4 7 s , 1 0 0 % o f 1 . 4 7 s t o t a l S h o w i n g t o p 1 5 n o d e s o u t o f 4 9 f l a t f l a t % s u m % c u m c u m % 1 . 2 9 s 8 7 . 7 6 % 8 7 . 7 6 % 1 . 2 9 s 8 7 . 7 6 % r u n t i m e . m e m m o v e 0 . 0 6 s 4 . 0 8 % 9 1 . 8 4 % 0 . 0 6 s 4 . 0 8 % r u n t i m e . u s l e e p 0 . 0 2 s 1 . 3 6 % 9 3 . 2 0 % 0 . 0 2 s 1 . 3 6 % r u n t i m e . m a d v i s e 0 . 0 2 s 1 . 3 6 % 9 4 . 5 6 % 0 . 0 2 s 1 . 3 6 % r u n t i m e . p t h r e a d _ k i l l 0 . 0 2 s 1 . 3 6 % 9 5 . 9 2 % 0 . 1 0 s 6 . 8 0 % r u n t i m e . s l i c e b y t e t o s t r i n g 0 . 0 1 s 0 . 6 8 % 9 6 . 6 0 % 1 . 2 5 s 8 5 . 0 3 % b y t e s . ( * B u f f e r ) . W r i t e S t r i n g 0 . 0 1 s 0 . 6 8 % 9 7 . 2 8 % 0 . 0 1 s 0 . 6 8 % r u n t i m e . ( * m s p a n ) . i n i t ( i n l i n e ) 0 . 0 1 s 0 . 6 8 % 9 7 . 9 6 % 0 . 0 1 s 0 . 6 8 % r u n t i m e . m e m c l r N o H e a p P o i n t e r s 0 . 0 1 s 0 . 6 8 % 9 8 . 6 4 % 0 . 0 1 s 0 . 6 8 % r u n t i m e . n e w A r e n a M a y U n l o c k 0 . 0 1 s 0 . 6 8 % 9 9 . 3 2 % 0 . 0 1 s 0 . 6 8 % r u n t i m e . p t h r e a d _ c o n d _ w a i t 0 . 0 1 s 0 . 6 8 % 1 0 0 % 0 . 0 5 s 3 . 4 0 % s t r c o n v . F o r m a t I n t 0 0 % 1 0 0 % 0 . 0 6 s 4 . 0 8 % b y t e s . ( * B u f f e r ) . S t r i n g ( i n l i n e ) 0 0 % 1 0 0 % 0 . 1 0 s 6 . 8 0 % b y t e s . ( * B u f f e r ) . g r o w 0 0 % 1 0 0 % 0 . 0 1 s 0 . 6 8 % b y t e s . m a k e S l i c e 0 0 % 1 0 0 % 1 . 3 6 s 9 2 . 5 2 % g o t t / c o m m o n / o p . C P U L o a d 生 成 内 存 概 要 文 件 对 堆 内 存 的 使 用 进 行 采 样 , 会 按 照 平 均 每 分 配 多 少 个 字 节 ( 默 认 为 5 1 2 B ) , 就 对 堆 内 存 的 使 用 情 况 进 行 一 次 采 样 。 M e m P r o f i l e R a t e 为 r u n t i m e . M e m P r o f i l e R a t e 设 置 采 样 频 率 ( 默 认 值 是 5 1 2 K B ) , 对 其 赋 0 值 表 示 停 止 采 样 。 W r i t e H e a p P r o f i l e 函 数 调 用 W r i t e H e a p P r o f i l e 函 数 , 根 据 采 样 频 率 进 行 采 样 , 并 把 收 集 到 的 采 样 信 息 写 入 指 定 文 件 。 / / 源 码 文 件 / / W r i t e H e a p P r o f i l e i s s h o r t h a n d f o r L o o k u p ( h e a p ) . W r i t e T o ( w , 0 ) . / / I t i s p r e s e r v e d f o r b a c k w a r d s c o m p a t i b i l i t y . f u n c W r i t e H e a p P r o f i l e ( w i o . W r i t e r ) e r r o r R e a d M e m S t a t s 函 数 W r i t e H e a p P r o f i l e ( f ) 函 数 记 录 的 并 不 是 实 时 的 内 存 概 要 信 息 , 而 是 最 近 一 次 内 存 垃 圾 工 作 完 成 后 产 生 的 。 要 得 到 实 时 信 息 可 以 使 用 r u n t i m e . R e a d M e m S t a t s ( ) 函 数 f u n c m a i n ( ) d e f e r f . C l o s e ( ) s t a r t M e m P r o f i l e ( ) f i b . F i b M a p ( 6 0 ) e n d M e m P r o f i l e ( f ) } f u n c s t a r t M e m P r o f i l e ( ) f u n c e n d M e m P r o f i l e ( f * o s . F i l e ) 调 用 r u n t i m e . M e m P r o f i l e R a t e 设 置 每 申 请 1 B 的 内 存 , 就 进 行 采 样 , 调 用 p p r o f . W r i t e H e a p P r o f i l e ( f ) 把 采 样 信 息 写 入 指 定 的 文 件 m e m _ a p i . l o g 中 生 成 阻 塞 概 要 文 件 S e t B l o c k P r o f i l e R a t e 函 数 它 在 r u n t i m e 包 中 , 用 来 设 置 采 样 频 率 , 其 参 数 r a t e 的 值 表 示 , 当 阻 塞 持 续 多 少 纳 秒 后 对 其 进 行 进 行 采 样 。 如 果 这 个 值 小 于 等 于 0 , 则 停 止 采 样 。 b l o c k p r o f i l e r a t e 变 量 参 数 r a t e 的 值 会 被 转 换 为 C P U 的 时 钟 周 期 , 然 后 赋 值 给 b l o c k p r o f i l e r a t e , 即 : 实 际 采 样 频 率 为 当 一 个 阻 塞 持 续 了 多 少 个 C P U 时 钟 周 期 , 就 对 这 个 事 件 进 行 采 样 / / g o 源 码 文 件 f u n c S e t B l o c k P r o f i l e R a t e ( r a t e i n t ) e l s e i f r a t e = = 1 e l s e } a t o m i c . S t o r e 6 4 ( & b l o c k p r o f i l e r a t e , u i n t 6 4 ( r ) ) } p p r o f . L o o k u p ( “ b l o c k ” ) 用 来 获 取 阻 塞 概 要 信 息 , 获 取 信 息 要 调 用 p p r o f . L o o k u p ( b l o c k ) , b l o c k 做 为 参 数 传 入 , 函 数 会 返 回 一 个 * p p r o f . P r o f i l e 类 型 的 值 , 对 这 个 值 调 用 W r i t e T o ( w i o . W r i t e r , d e b u g i n t ) 方 法 , 可 以 把 概 要 信 息 写 入 文 件 。 这 个 方 法 的 第 一 个 参 数 传 入 要 写 入 概 要 信 息 的 文 件 , 第 二 个 参 数 d e b u g 表 示 概 要 信 息 详 细 程 度 f u n c m a i n ( ) d e f e r f . C l o s e ( ) s t a r t B l o c k P r o f i l e ( ) f i b . F i b M a p ( 4 5 ) s t o p B l o c k P r o f i l e ( f ) } f u n c s t a r t B l o c k P r o f i l e ( ) f u n c s t o p B l o c k P r o f i l e ( f * o s . F i l e ) d e b u g 参 数 的 值 0 : 生 成 p r o t o c o l b u f f e r s 字 节 流 1 : 生 成 内 容 可 读 的 普 通 文 本 的 概 要 文 件 , 且 函 数 名 , 包 名 , 源 码 文 件 等 信 息 会 被 做 为 注 释 加 入 进 概 要 文 件 2 : 生 成 内 容 可 读 的 普 通 文 本 的 概 要 文 件 , 且 包 括 更 详 细 的 信 息 对 于 使 用 参 数 值 1 、 2 生 成 的 概 要 文 件 , 不 能 使 用 g o t o o l p p r o f 查 看 , 因 为 文 件 不 是 p r o t o c o l 格 式 p p r o f . L o o k u p 函 数 的 使 用 L o o k u p ( n a m e s t r i n g ) 通 过 给 定 的 n a m e 的 值 , 返 回 对 应 的 概 要 信 息 。 如 果 返 回 值 是 n i l , 表 示 不 存 在 与 给 定 名 称 对 应 的 概 要 信 息 。 预 定 义 了 6 个 概 要 名 称 , 分 别 是 g o r o u t i n e , t h r e a d c r e a t e , h e a p , a l l o c s , b l o c k , m u t e x 函 数 的 返 回 值 是 * P r o f i l e 类 型 的 值 , 可 以 通 过 调 用 W r i t e T o ( w i o . W r i t e r , d e b u g i n t ) 方 法 , 把 采 样 的 概 要 信 息 写 入 指 定 的 文 件 中 ( 通 过 第 一 个 参 数 设 置 ) , 第 二 个 参 数 表 示 了 写 入 信 息 的 详 细 细 节 程 序 , 值 可 以 是 0 , 1 , 2 ( 具 体 代 表 的 内 容 就 是 上 面 小 节 讲 的 ) 。 预 定 义 概 要 名 称 的 使 用 g o r o u t i n e 此 指 标 可 以 收 集 正 在 使 用 的 所 有 g o r o u t i n e 的 堆 栈 跟 踪 信 息 , 在 调 用 W r i t e T o 方 法 时 , 如 果 d e b u g 的 值 大 于 等 于 2 , 会 把 这 些 信 息 写 入 概 要 文 件 , 文 件 可 能 会 非 常 大 h e a p 、 a l l o c s 此 指 标 会 收 集 与 堆 内 存 的 分 配 和 释 放 有 关 的 采 样 信 息 , 可 以 看 成 是 内 存 概 要 信 息 , h e a p 与 a l l o c s 仅 在 d e b u g 为 0 的 时 候 会 有 区 别 , h e a p 统 计 的 是 已 经 分 配 但 还 没 有 释 放 的 内 存 空 间 , a l l o c s 展 示 的 是 已 分 配 的 内 存 空 间 。 当 d e b u g 的 值 大 于 0 时 , 这 两 个 指 标 值 输 出 的 内 容 是 相 同 的 t h r e a d c r e a t e 此 指 标 会 收 集 堆 栈 跟 踪 信 息 。 这 些 堆 栈 跟 踪 信 息 中 的 每 一 个 都 会 描 绘 出 一 个 代 码 调 用 链 , 这 些 调 用 链 上 的 代 码 都 导 致 新 的 操 作 系 统 线 程 产 生 b l o c k 此 指 标 会 收 集 因 争 用 同 步 原 语 而 被 阻 塞 的 那 些 代 码 的 堆 栈 跟 踪 信 息 m u t e x 此 指 标 会 收 集 曾 经 作 为 同 步 原 语 持 有 者 的 那 些 代 码 , 它 们 的 堆 栈 跟 踪 信 息 同 步 原 语 可 以 理 解 为 : 通 道 、 互 斥 锁 、 条 件 变 量 、 ” W a i t G r o u p ” 对 于 除 了 C P U 概 要 信 息 之 外 的 其 他 概 要 信 息 , 我 们 都 可 以 通 过 调 用 这 个 函 数 获 取 到 。 为 基 于 H T T P 协 议 的 网 络 服 务 添 加 性 能 分 析 接 口 在 我 们 编 写 网 络 服 务 程 序 的 时 候 , 使 用 n e t / h t t p / p p r o f 包 要 比 直 接 使 用 r u n t i m e / p p r o f 包 方 便 和 实 用 很 多 , 这 个 代 码 包 可 以 为 网 络 服 务 的 监 测 提 供 有 力 的 支 撑 p a c k a g e m a i n i m p o r t ( l o g n e t / h t t p _ n e t / h t t p / p p r o f ) f u n c m a i n ( ) 直 接 访 问 h t t p : / / l o c a l h o s t : 8 0 8 2 / d e b u g / p p r o f 可 以 看 到 g o r o u t i n e , t h r e a d c r e a t e , h e a p , a l l o c s , b l o c k , m u t e x 这 6 个 指 标 的 概 要 信 息 。 它 们 都 配 有 d e b u g 参 数 , 默 认 值 为 0 , 可 以 通 过 改 变 d e b u g 的 值 改 变 概 要 信 息 的 详 细 程 度 , 如 g o t r o u t i n e 的 U R L 是 h t t p : / / l o c a l h o s t : 8 0 8 2 / d e b u g / p p r o f / g o r o u t i n e ? d e b u g = 1 当 访 问 h t t p : / / l o c a l h o s t : 8 0 8 2 / d e b u g / p p r o f / p r o f i l e 时 , 程 序 会 执 行 对 C P U 概 要 信 息 的 采 样 , 可 以 通 过 加 入 参 数 s e c o n d s 来 控 制 对 c p u 的 访 问 时 间 ( 默 认 是 3 0 秒 ) , 当 采 样 结 束 后 , 会 提 示 你 下 载 概 要 文 件 。 你 也 可 以 执 行 下 面 命 令 , 直 接 读 取 概 要 文 件 g o t o o l p p r o f h t t p : / / l o c a l h o s t : 6 0 6 0 / d e b u g / p p r o f / p r o f i l e ? s e c o n d s = 6 0 要 回 答 的 问 题 先 写 结 论 , 便 于 接 下 来 的 阅 读 与 理 解 基 准 测 试 与 剖 析 的 区 别 基 准 测 试 可 以 用 来 衡 量 一 个 程 序 的 性 能 , 如 果 想 让 程 序 运 行 的 更 快 , 或 对 性 能 不 理 想 的 程 序 进 行 提 升 , 基 准 测 试 无 法 给 出 从 哪 里 可 以 进 行 优 化 。 通 过 剖 析 , 可 以 找 出 程 序 性 能 瓶 颈 所 在 , 从 而 有 针 对 性 的 对 程 序 进 行 优 化 , 提 高 性 能 。 不 要 过 早 的 进 行 优 化 , 9 7 % 的 场 景 , 都 不 需 要 过 早 优 化 或 根 本 就 不 需 要 优 化 , 我 们 要 做 的 仅 是 让 程 序 可 以 正 常 运 行 即 可 。 剖 析 是 如 何 进 行 的 剖 析 就 是 在 程 序 执 行 期 间 进 行 一 些 自 动 抽 样 , 在 结 束 时 进 行 推 断 , 最 后 把 统 计 结 果 保 存 为 剖 析 数 据 文 件 , 供 剖 析 工 具 使 用 。 G o 语 言 支 持 多 种 类 型 的 剖 析 性 能 分 析 , 可 以 通 过 g o t e s t 工 具 或 调 用 G o 的 r u n t i m e 性 能 分 析 A P I ( 启 用 运 行 时 剖 析 ) , 对 程 序 进 行 剖 析 。 需 要 对 哪 些 代 码 进 行 剖 析 要 对 程 序 的 主 要 功 能 , 关 键 部 分 进 行 基 准 测 试 , 然 后 对 其 进 行 剖 析 , 功 能 测 试 不 应 该 参 与 进 来 , 使 用 r u n = N o n e , 禁 止 功 能 测 试 的 运 行 g o 语 言 测 试 示 例 函 数 P o s t e d o n 2 0 2 1 0 8 1 2 I n g o l a n g 示 例 函 数 以 E x a m p l e 开 头 , 后 面 加 对 应 的 函 数 名 , 示 例 没 有 参 数 列 表 与 返 回 值 列 表 f u n c E x a m p l e F i b M a p ( ) 后 缀 F i b M a p 的 首 字 母 是 大 写 , 因 为 这 个 函 数 在 源 码 中 就 是 大 写 , 必 须 与 源 码 保 持 一 致 , 如 果 写 为 f i b M a p , 那 么 会 提 示 E x a m p l e F i b W i t h M a p r e f e r s a n u n k n o w n i d e n t i f i e r , 即 无 法 与 对 应 的 函 数 相 关 联 。 要 注 意 的 是 , 因 为 F i b M a p 方 法 是 可 导 出 的 , 它 的 示 例 函 数 要 写 为 E x a m p l e F i b M a p , 如 果 方 法 是 不 可 导 出 的 , 那 么 它 的 示 例 函 数 要 写 为 E x a m p l e _ x x x 的 形 式 , 如 f i b W i t h M a p 方 法 的 示 例 函 数 可 以 命 名 为 E x a m p l e _ f i b W i t h M a p 命 名 约 定 G o 语 言 通 过 大 量 的 命 名 约 定 来 简 化 工 具 的 复 杂 度 , 规 范 代 码 的 风 格 。 对 示 例 函 数 的 命 名 有 如 下 约 定 : 包 级 别 的 示 例 函 数 , 直 接 命 名 为 f u n c E x a m p l e ( ) 函 数 F 的 示 例 , 命 名 为 f u n c E x a m p l e F ( ) 类 型 T 的 示 例 , 命 名 为 f u n c E x a m p l e T ( ) 类 型 T 上 的 方 法 M 的 示 例 , 命 名 为 f u n c E x a m p l e T _ M ( ) 如 果 同 一 个 方 法 需 要 提 供 多 个 示 例 , 可 以 在 示 例 函 数 名 称 后 附 加 一 个 不 同 的 后 缀 来 实 现 , 但 这 种 后 缀 必 须 以 小 写 字 母 开 头 , 大 写 也 是 可 以 的 f u n c E x a m p l e _ s u f f i x ( ) f u n c E x a m p l e F _ s u f f i x ( ) f u n c E x a m p l e T _ s u f f i x ( ) f u n c E x a m p l e T _ M _ s u f f i x ( ) 示 例 代 码 会 放 在 单 独 的 示 例 文 件 中 , 如 e x a m p l e _ t e s t . g o h t t p s : / / g i t h u b . c o m / g o l a n g / g o / b l o b / m a s t e r / s r c / b y t e s / e x a m p l e _ t e s t . g o 测 试 示 例 函 数 / / 测 试 通 过 g o t e s t g o t t / f i b r u n = E x a m p l e F i b M a p o k g o t t / f i b 0 . 0 0 8 s / / 测 试 不 通 过 g o t e s t g o t t / f i b r u n = E x a m p l e F i b M a p F A I L : E x a m p l e F i b M a p ( 0 . 0 0 s ) g o t : 1 0 2 3 3 4 1 5 5 w a n t : / / 这 里 就 是 o u t p u t 后 面 期 待 的 值 1 0 2 3 3 4 1 5 6 F A I L F A I L g o t t / f i b 0 . 0 1 2 s F A I L 有 时 候 , 输 出 顺 序 可 能 不 确 定 , 比 如 循 环 输 出 m a p 的 值 , 那 么 可 以 使 用 U n o r d e r e d o u t p u t 开 头 的 注 释 示 例 函 数 的 作 用 作 为 文 档 使 用 它 可 以 直 观 的 展 示 一 个 函 数 的 用 法 与 功 能 。 根 据 E x a m p l e 的 后 缀 部 分 , g o d o c 文 档 服 务 会 把 示 例 函 数 关 联 到 函 数 本 身 , 在 查 询 在 线 文 档 的 时 候 , 可 以 看 到 函 数 的 具 体 用 法 及 示 例 函 数 验 证 函 数 是 否 正 确 如 果 示 例 函 数 中 包 含 / / O u t p u t 注 释 , 那 么 在 执 行 g o t e s t 的 时 候 , 示 例 函 数 也 会 被 运 行 , 然 后 检 查 标 准 输 出 是 否 与 注 释 匹 配 , 不 匹 配 则 做 为 测 试 失 败 处 理 。 如 果 示 例 函 数 中 没 有 包 含 / / O u t p u t 注 释 , 那 么 g o t e s t 的 时 候 , 它 不 会 被 运 行 可 以 在 g o d o c 提 供 的 在 线 文 档 上 显 示 , 包 括 函 数 信 息 , 示 例 函 数 源 码 文 件 / / f i b _ t e s t . g o f u n c E x a m p l e F i b M a p ( ) f u n c E x a m p l e _ f i b W i t h M a p ( ) 可 以 有 多 个 标 准 输 出 , 与 之 对 应 的 o u t p u t 也 要 有 多 个 注 释 f u n c F i b M a p ( x i n t ) i n t f u n c f i b W i t h M a p ( x i n t ) i n t g o 语 言 测 试 惯 例 P o s t e d o n 2 0 2 1 0 7 2 4 I n g o l a n g 运 行 某 个 包 的 测 试 不 指 定 包 名 : g o t e s t 命 令 如 果 没 有 参 数 指 定 包 , 默 认 使 用 当 前 目 录 对 应 的 包 运 行 测 试 , 且 测 试 结 果 不 会 被 缓 存 。 第 二 次 运 行 测 试 , 测 试 结 果 中 没 有 包 含 ( c a c h e d ) 标 示 , 说 明 测 试 结 果 没 有 被 缓 存 , 每 次 执 行 都 会 重 新 构 建 测 试 # g o t t / h e l l o 当 前 目 录 为 包 名 为 h e l l o 的 目 录 g o t e s t P A S S o k g o t t / h e l l o 1 . 0 2 5 s g o t e s t o k g o t t / h e l l o 1 . 0 2 5 s 指 定 包 名 : 测 试 结 果 会 被 缓 存 g o t e s t g o t t / h e l l o o k g o t t / h e l l o ( c a c h e d ) 运 行 所 有 测 试 使 用 g o t e s t . / . . . 标 记 运 行 所 有 包 的 测 试 , 测 试 结 果 会 被 缓 存 g o t e s t . / . . . o k g o t t / h e l l o 1 . 0 2 6 s o k g o t t / h i 0 . 0 4 0 s o k g o t t / p p r i n t 0 . 0 1 7 s o k g o t t / p r i m e 0 . 0 1 4 s g o t e s t . / . . . o k g o t t / h e l l o ( c a c h e d ) o k g o t t / h i ( c a c h e d ) o k g o t t / p p r i n t ( c a c h e d ) o k g o t t / p r i m e ( c a c h e d ) 有 效 的 记 录 测 试 失 败 信 息 测 试 失 败 的 信 息 一 般 的 形 式 是 “ f ( x ) = y , w a n t z ” , 其 中 f ( x ) 解 释 了 失 败 的 操 作 和 对 应 的 输 入 , y 是 实 际 的 运 行 结 果 , z 是 期 望 的 正 确 的 结 果 。 比 起 那 些 失 败 就 打 印 满 屏 的 堆 栈 信 息 的 错 误 日 志 , 这 种 记 录 格 式 使 得 测 试 人 员 很 容 易 定 位 到 问 题 所 在 , 甚 至 都 不 需 要 去 看 源 码 文 件 。 g o t : = s u m ( x 1 , x 2 ) i f g o t ! = w a n t 随 机 测 试 如 何 预 判 结 果 一 种 方 法 是 编 写 另 一 个 对 照 函 数 , 使 用 简 单 和 清 晰 的 算 法 , 虽 然 效 率 较 低 但 是 行 为 和 要 测 试 的 函 数 是 一 致 的 , 然 后 针 对 相 同 的 随 机 输 入 检 查 两 者 的 输 出 结 果 。 第 二 种 是 生 成 的 随 机 输 入 的 数 据 遵 循 特 定 的 模 式 , 这 样 我 们 就 可 以 知 道 期 望 的 输 出 的 模 式 。 比 如 基 于 随 机 种 子 生 成 需 要 的 大 量 数 据 , 测 试 日 志 中 不 用 去 记 录 这 些 大 量 的 数 据 , 只 需 要 记 录 这 个 随 机 种 子 即 可 , 之 后 可 以 根 据 这 个 种 子 重 现 失 败 的 测 试 用 例 , 查 找 代 码 问 题 所 在 测 试 中 的 异 常 在 测 试 代 码 中 不 要 调 用 l o g . F a t a l 或 o s . E x i t , 调 用 这 类 函 数 会 导 致 整 个 测 试 提 前 退 出 , 后 面 的 测 试 都 将 无 法 运 行 。 调 用 这 些 函 数 的 特 权 应 该 放 在 m a i n 函 数 中 。 如 果 真 的 有 意 外 发 生 导 致 测 试 过 程 中 发 生 p a n i c 异 常 , 那 么 在 测 试 中 应 该 尝 试 用 r e c o v e r 捕 获 异 常 , 并 记 录 下 来 , 然 后 将 当 前 测 试 当 作 失 败 处 理 ( 即 调 用 t . E f f o r / t . F a i l / t . F a i l N o w 之 类 的 方 法 ) 。 在 运 行 测 试 的 时 候 , 应 该 确 保 所 有 测 试 都 得 到 运 行 , 这 样 当 测 试 运 行 结 束 后 , 就 可 以 得 到 所 有 失 败 的 测 试 用 例 的 信 息 , 而 不 是 在 某 个 测 试 失 败 后 , 就 停 止 运 行 其 后 面 的 测 试 。 f u n c T e s t L o g F a t a l ( t * t e s t i n g . T ) f u n c T e s t P r i n t ( t * t e s t i n g . T ) 由 于 调 用 了 l o g . F a t a l 或 o s . E x i t , 在 T e s t L o g F a t a l ( ) 后 面 的 测 试 用 例 都 不 会 被 运 行 g o t e s t v g o t t / h e l l o = = = R U N T e s t L o g F a t a l 2 0 2 1 / 0 7 / 2 4 1 7 : 3 4 : 0 2 T e s t e n c o u n t e r a f a t a l F A I L g o t t / h e l l o 0 . 0 0 7 s F A I L # 没 有 打 印 T e s t P r i n t ( ) 的 测 试 日 志 # 把 T e s t P r i n t ( ) 放 到 T e s t L o g F a t a l ( ) 的 前 面 g o t e s t v g o t t / h e l l o = = = R U N T e s t P r i n t h e l l o _ t e s t . g o : 2 4 : j u s t P r i n t h e l l o _ t e s t . g o : 2 5 : / U s e r s / g a / m / o p t / g o / g o _ r o o t P A S S : T e s t P r i n t ( 0 . 0 0 s ) = = = R U N T e s t L o g F a t a l 2 0 2 1 / 0 7 / 2 4 1 7 : 3 7 : 0 4 T e s t e n c o u n t e r a f a t a l F A I L g o t t / h e l l o 0 . 0 1 3 s F A I L T e s t P r i n t 可 以 运 行 , 但 T e s t L o g F a t a l 之 后 的 测 试 用 例 都 不 会 得 到 运 行 , 在 调 用 l o g . F a t a l 函 数 后 , 整 个 测 试 程 序 就 退 出 了 m o c k 测 试 中 的 敏 感 对 象 对 外 部 环 境 的 依 赖 数 据 库 的 连 接 , 第 三 方 接 口 的 调 用 导 致 生 产 代 码 产 生 一 些 调 试 信 息 的 钩 子 函 数 诱 导 生 产 代 码 进 入 某 些 重 要 状 态 的 改 变 超 时 、 错 误 , 甚 至 是 一 些 刻 意 制 造 的 并 发 行 为 等 因 素 应 该 对 以 上 这 些 对 象 进 行 仿 造 ( m o c k ) , 从 而 得 到 一 个 纯 净 的 测 试 环 境 。 有 一 个 需 要 注 意 的 地 方 , 如 果 在 某 个 测 试 用 例 中 m o c k 了 某 些 对 象 , 在 这 个 测 试 用 例 运 行 完 成 后 , 要 对 这 些 m o c k 的 对 象 进 行 还 原 , 以 避 免 影 响 其 它 测 试 用 例 。 f u n c T e s t C h e c k Q u o t a N o t i f i e s U s e r ( t * t e s t i n g . T ) ( ) / / I n s t a l l t h e t e s t s f a k e n o t i f y U s e r . v a r n o t i f i e d U s e r , n o t i f i e d M s g s t r i n g n o t i f y U s e r = f u n c ( u s e r , m s g s t r i n g ) / / . . . r e s t o f t e s t . . . } 先 把 要 m o c k 的 对 象 保 存 起 来 , 等 测 试 完 成 后 , 再 对 其 进 行 恢 复 , 可 以 使 用 d e f e r 语 句 来 延 后 执 行 处 理 恢 复 的 代 码 避 免 脆 弱 的 测 试 一 个 好 的 测 试 不 应 该 在 程 序 仅 仅 只 是 做 了 微 小 变 化 就 失 败 一 个 好 的 测 试 不 应 该 在 遇 到 一 点 小 错 误 时 就 立 刻 退 出 测 试 , 它 应 该 尝 试 报 告 更 多 的 相 关 的 错 误 信 息 , 因 为 我 们 可 能 从 多 个 失 败 测 试 的 模 式 中 发 现 错 误 产 生 的 规 律 一 个 好 的 测 试 的 关 键 是 首 先 实 现 你 期 望 的 具 体 行 为 , 然 后 才 是 考 虑 简 化 测 试 代 码 、 避 免 重 复 。 如 果 直 接 从 抽 象 、 通 用 的 测 试 库 着 手 , 很 难 取 得 良 好 结 果 。 保 持 测 试 代 码 的 简 洁 和 内 部 结 构 的 稳 定 , 特 别 是 对 断 言 部 分 要 有 所 选 择 , 比 如 不 要 对 字 符 串 进 行 全 字 匹 配 , 而 是 针 对 那 些 在 项 目 的 发 展 中 是 比 较 稳 定 不 变 的 子 串 测 试 时 涉 及 到 对 全 局 变 量 产 生 修 改 的 那 些 测 试 , 要 以 串 行 的 方 式 运 行 , 不 能 并 行 运 行 g o 语 言 性 能 测 试 函 数 中 的 计 时 器 P o s t e d o n 2 0 2 1 0 7 1 9 I n g o l a n g 计 时 器 用 来 记 录 性 能 测 试 函 数 在 每 次 运 行 时 消 耗 的 时 间 , 同 时 它 也 记 录 了 此 次 运 行 对 内 存 分 配 的 字 节 数 和 分 配 的 次 数 。 与 之 相 关 的 有 三 个 方 法 S t a r t T i m e r 、 S t o p T i m e r 和 R e s e t T i m e r 运 行 g o t e s t 时 就 用 到 了 计 时 器 , 命 令 会 启 用 这 个 函 数 的 计 时 器 , 当 函 数 执 行 完 成 , 停 止 计 时 器 , 记 录 下 此 次 的 运 行 时 间 , 然 后 与 默 认 执 行 时 间 上 限 ( 默 认 为 1 秒 ) 做 比 较 , 如 果 没 有 超 过 , 则 增 大 b . N 的 值 , 再 次 执 行 该 函 数 , 如 此 反 复 , 直 到 函 数 的 运 行 时 间 大 于 或 等 于 执 行 时 间 上 限 , 从 而 得 到 b . N 的 值 , 即 函 数 的 最 大 执 行 次 数 及 对 应 的 时 间 , 从 而 得 出 最 终 的 测 试 结 果 通 过 对 S t a r t T i m e r 、 S t o p T i m e r 的 调 用 , 我 们 可 以 在 测 试 中 去 除 那 些 本 不 应 该 计 入 测 试 时 间 的 代 码 的 执 行 时 间 , 比 如 一 些 测 试 前 的 准 备 代 码 f u n c B e n c h m a r k G e t P r i m e s ( b * t e s t i n g . B ) } t i m e . S l e e p 用 来 模 拟 得 到 m a x 的 值 所 要 进 行 的 耗 时 操 作 , 而 我 们 要 测 试 的 是 G e t P r i m e s ( ) 的 性 能 , 不 应 计 入 计 算 m a x 值 所 用 的 时 间 , 所 以 要 把 开 始 时 间 设 置 在 得 到 m a x 之 后 。 通 过 b . S t o p T i m e r ( ) 与 b . S t a r t T i m e r ( ) 的 配 合 使 用 , 就 可 以 去 除 任 何 一 段 代 码 的 执 行 时 间 , b . R e s e t T i m e r ( ) 是 去 除 它 之 前 代 码 的 执 行 时 间 。 通 过 对 计 时 器 的 调 用 , 可 以 让 测 试 函 数 的 执 行 时 间 更 加 准 确 。 1 2 … 7 京 I C P 备 1 0 0 4 4 7 5 5 号 京 公 网 安 备 1 1 0 1 0 9 0 2 0 0 0 6 6 9 号 © 2 0 0 9 – 2 0 2 4 戛 戛 H a p p y P o w e r e d b y H e x o & N e x T . G e m i n i
站点概括关于www.gagahappy.cn说明:
www.gagahappy.cn由网友主动性提交被百万链整理收录的,百万链仅提供www.gagahappy.cn的基础信息并免费向大众网友展示,www.gagahappy.cn的是IP地址:- 地址:-,www.gagahappy.cn的百度权重为0、百度手机权重为0、百度收录为0条、360收录为0条、搜狗收录为0条、谷歌收录为0条、百度来访流量大约在-之间、百度手机端来访流量大约在-之间、www.gagahappy.cn的备案号是-、备案人叫-、被百度收录的关键词有0个、手机端关键词有0个、该站点迄今为止已经创建未知。
内容声明:1、本站收录的内容来源于大数据收集,版权归原网站所有!
2、本站收录的内容若侵害到您的利益,请联系我们进行删除处理!
3、本站不接受违规信息,如您发现违规内容,请联系我们进行清除处理!
4、本文地址:https://www.baiwanlian.cn/links/537b04595f1b08dc99c6.html,复制请保留版权链接!
六安市水利局,六安水利
试试吧采用渐进式自研架构解决方案,致力于打造领先的一站式在线工具平台,旗下在线工具主要分类为:人工智能、加密解密、编码解码、颜色空间、格式美化、图片处理、音频视频、时间管理和单位转换等。
晶锐瓷业-陶瓷过滤片,蜂窝陶瓷过滤片,去除异味用陶瓷载体_晶锐瓷业(北京)有限公司
晶锐瓷业(北京)有限公司是一家蜂窝陶瓷过滤片专业化生产企业,始终致力于铸造除渣、环保净化等领域使用陶瓷过滤片的研发和生产。
鲁尔接头测试仪-注射针测试仪-注射器测试仪-威夏电子科技(杭州)有限公司
威夏科技(www.weixia-china.com)-专业医疗器械检测仪器厂家,研发鲁尔接头测试仪、注射针测试仪、缝合针针尖刺穿力测试仪、注射器测试仪、鲁尔圆锥接头多功能测试仪、导管流量测试仪、锋利度测试仪、缝合线测试仪、输液器测试仪等一次性耗材检测仪器,咨询热线:13757180727。
本所负责的专业领域主要包括:公司证券业务、建筑与房地产业务、金融保险业务、国际业务、基本建设业务、知识产权业务、海商海事业务、刑事辩护业务、诉讼与仲裁业务等
该站暂未设置description...
考研网提供最新考研资讯、高效备考攻略与丰富的学习资料,助力考研学子科学规划复习,轻松实现考研梦想!
江阴市鼎博科技有限公司公司现生产成熟设备有:九折型材设备、护栏板成型设备、护栏板成型机、钢跳板设备、护栏板设备、脚踏板设备、冷弯设备、成型机设备、冷弯成型设备、冷弯成型机、电缆桥架生产线等
中新网12月30日电据韩联社援引韩国航空铁路事故调查委员会等方面消息,29日在全罗南道务安机场失事的济州航空7C2216航班的黑匣子外壳受损,解读工作至少耗时一个月,韩国全罗南道务安国际机场29日发生重大坠机事故,造成179人遇难,2人获救,图为事故救援现场,韩国全罗南道务安国际机场29日发生重大坠机事故,造成179人遇难,2人获救,...。
最新资讯 2024-12-30 10:36:25
沈末末的后悔与石斤的冷淡在第24集中,沈末末开始对自己草率放弃与石斤的感情感到后悔,她意识到了自己的错误,于是主动关心石斤,试图挽回这段关系,石斤却故意对她冷淡,希望借此机会让末末体验一下患得患失的感觉,沈末末果然陷入了这种纠结之中,不知如何才能恢复与石斤之间的关系,厨王争霸赛总决赛的揭晓与此同时,厨王争霸赛总决赛即将举行,刘由果和廖...。
最新资讯 2024-12-31 00:11:38
智元机器人日前宣布推出全球首个基于全域真实场景、全能硬件平台、全程质量把控的百万真机数据集开源项目——AgiBotWorld,这一项目标志着具身智能领域的ImageNet时刻已经到来,AgiBotWorld,具身智能数据集新标杆AgiBotWorld是全球首个基于全域真实场景、全能硬件平台、全程质量把控的百万真机数据集,与谷歌开源的O...。
最新资讯 2024-12-31 06:16:11
根据北京市住房公积金管理中心发布的通知,自2025年1月1日起,北京市存量公积金贷款利率将下调,这一政策适用于2024年5月18日前发放的住房公积金个人住房贷款,利率调整细则调整后的利率将根据首套或二套住房情况有所不同,首套房,调整为2.95%,此前为3%,二套房,调整为3.95%,此前为4%,利率下调影响利率下调将有效减轻购应把握这...。
最新资讯 2024-12-31 08:40:33
引言2025年的第一场旅行,李镁欣决定从位于赤道的狮城飞往中国东北的雪国,她计划从长春到延吉,再到长白山,在冰天雪地中迎接新的一年,中国与新加坡互免签证政策李镁欣是马来西亚人,常居新加坡,得益于中国与新加坡、马来西亚等国的互免签证政策,她发现身边越来越多朋友开启了前往中国的旅程,2023年7月,中国恢复了对新加坡公民15天免签政策,通...。
最新资讯 2024-12-31 20:05:58
案件详情信息后,确认总共有47名受害未成年人,一审判决台北地方法院审理后,排除了12名未到案的被害人,只认定黄子佼无故持有35人的2259个未成年性影像文件,判处8个月有期徒刑且未宣告缓刑,检方上诉检察官认为,虽然部分被害人未到庭说明,但影像显示他们确实为未成年人,一审未能将此纳入犯罪事实范围内,被告用于下载未成年人性影像的电脑设备也...。
最新资讯 2025-01-03 00:46:17
2024年12月31日跨年夜,南昌地铁客运量达到206.24万人次,单日客流强度为1.61万人次,公里,其中,1号线,84.31万人次2号线,46.21万人次3号线,40.29万人次4号线,35.43万人次出行客流主要集中在节庆活动周边的重点车站,如八一馆站、卫东站、万寿>,2号线,1.10亿人次3号线,0.83亿人次4号线,0....。
最新资讯 2025-01-03 07:36:10
导语,1月2日,河北省邯郸市临漳县的一家饭店因独特的店名涛的饭店在社交媒体上走红,这个名字吸引了众多网友的注意,引发了广泛讨论和关注,饭店老板对意外走红感到意外,他希望这个名字能唤起人们对家的温馨回忆,名字引爆关注,引发乡愁共鸣涛的饭店位于一个繁忙的十字路口,名字十分醒目,发布视频的网友表示,这个店名让人耳目一新,引发了网友的热议,饭...。
最新资讯 2025-01-03 10:08:40
1月1日,山东青岛,一名男孩在生日当天收到了来自父母的特别惊喜,父母偷偷包下了公交站广告牌,为儿子送上了一份特殊的生日祝福,男孩的母亲表示,儿子根本没有想到会收到这样的惊喜,在公交车上突然看到自己的广告牌后十分惊喜,作为母亲,她想用自己的仪式感给儿子创造满满的惊喜和回忆,男孩的父亲也表示,他们希望通过这样的方式表达对儿子的爱和祝福,让...。
最新资讯 2025-01-03 15:27:35
近日,演员关凌发布了几则关于教导孩子的短视频,不少网友感叹贾圆圆你也有今天,关凌在,我爱我家,中饰演的贾圆圆收获了观众大量好评,12月19日,关凌发布了一段视频,展示了她在辅导孩子写作业时的一些片段,视频中的她剪掉了废话,留下了一些金句,这个讲了好几遍还错吗,这个是不是不应该,看我干嘛啊,我脸上有字,咱能不抠那橡皮吗,他们经常在辅导孩...。
最新资讯 2025-01-05 20:36:01
台湾民众党前主席柯文哲被羁押禁见后,民众党于11日上街钉孤枝,要求民进党当局恢复司法正义,国民党中央党部干部和党团民代也到场声援,国民党主席子弟兵澄清蓝白分歧国民党主席朱立伦的子弟兵、党智库副执行长凌涛曾因2024年大选与民众党民代黄珊珊、党团主任陈智菡产生分歧,凌涛表示,陈智菡已承认当初为了保住政党票而不支持蓝白合作,并对外致歉,他...。
互联网资讯 2025-01-31 00:52:37
世嘉公司最近发布了,真女神转生5,的新宣传片,其中介绍了一款名为鹿屋野比卖神的角色,这款角色在游戏中扮演重要的角色,它源自于日本的草之神,鹿屋野比卖神在日本神话中的地位与形象是一个引人入胜的议题,其神名中的,Kaya,一词,原是日语中用于修补屋顶的茅草的词汇,这种茅草在人类生活中非常普遍,因此被视作与人类生活密切相关的自然资源,随着时...。
游戏资讯 2025-02-03 21:17:06