当前位置: 首页 > article >正文

MySQL 可观测性最佳实践

MySQL 简介

MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、可靠性和易用性而闻名,适用于各种规模的应用,从小型网站到大型企业级系统。

监控 MySQL 指标是维护数据库健康、优化性能和确保数据安全的基础,通过监控查询响应时间和事务处理速度,可以及时发现并解决性能瓶颈。同时,监控 CPU 和内存使用情况有助于合理分配资源,避免过载。在出现故障时,历史指标数据能够快速定位和解决问题。此外,分析数据增长趋势可以帮助提前规划存储扩展,防止空间不足。

采集全系统环境下 MySQL 相关指标信息:

  • MySQL Global Status 基础数据采集
  • Schema 相关数据
  • InnoDB 相关指标
  • 支持自定义查询数据采集

观测云

观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。

部署 DataKit

DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。

登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

MySQL 配置

前置条件
  • MySQL 版本 5.7+
创建监控账号

创建监控账号(一般情况,需用 MySQL root 账号登陆才能创建 MySQL 用户),使用 CREATE USER 语句来创建用户。以下是一个示例。

注意:

  • 创建操作,限定了 datakit 这个用户,只能在 MySQL 主机上(localhost)访问 MySQL。
  • 如果需要对 MySQL 进行远程采集,建议将 localhost 替换成 %(表示 DataKit 可以在任意机器上访问 MySQL),也可用指定的 DataKit 安装机器地址
该语句将在MySQL数据库中创建一个名为'datakit'的用户,并为该用户设置密码为'<UNIQUEPASSWORD>'
CREATE USER 'datakit'@'localhost' IDENTIFIED BY '<UNIQUEPASSWORD>';
-- MySQL 8.0+以上可使用caching_sha2_password 方法创建
CREATE USER 'datakit'@'localhost' IDENTIFIED WITH caching_sha2_password by '<UNIQUEPASSWORD>';
为监控账号授权

注意:

  • 授权操作,限定了 datakit 这个用户,只能在 MySQL 主机上(localhost)访问 MySQL。
  • 如果需要对 MySQL 进行远程采集,建议将 localhost 替换成 %(表示 DataKit 可以在任意机器上访问 MySQL),也可用指定的 DataKit 安装机器地址
GRANT PROCESS ON *.* TO 'datakit'@'localhost';
GRANT SELECT ON *.* TO 'datakit'@'localhost';
show databases like 'performance_schema';
GRANT SELECT ON performance_schema.* TO 'datakit'@'localhost';
GRANT SELECT ON mysql.user TO 'datakit'@'localhost';
GRANT replication client on *.*  to 'datakit'@'localhost';#性能指标采集需
CREATE SCHEMA IF NOT EXISTS datakit;
GRANT EXECUTE ON datakit.* to datakit@'%';
GRANT CREATE TEMPORARY TABLES ON datakit.* TO datakit@'%';-- MySQL 5.6 & 5.7
GRANT REPLICATION CLIENT ON *.* TO datakit@'%' WITH MAX_USER_CONNECTIONS 5;-- MySQL >= 8.0
ALTER USER datakit@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datakit@'%';
GRANT PROCESS ON *.* TO datakit@'%';

Tips:

  • 如用 localhost 时发现采集器有如下报错,需要将上述步骤的 localhost 换成 ::1
    Error 1045: Access denied for user 'datakit'@'localhost' (using password: YES)
  • 另外,也需要注意下 MySQL 5.7 和 8.0 版本,授权上有所区别。

DataKit 采集器配置

DataKit 内置了 MySQL 采集器,采集 MySQL 相关数据。

  • 进入 datakit 安装目录下的 conf.d/db 目录,复制 mysql.conf.sample 并命名为 mysql.conf
cp mysql.conf.sample mysql.conf
  • 调整 mysql.conf
[[inputs.mysql]]host = "localhost"user = "datakit"pass = "<PASS>"port = 3306[inputs.mysql.log]# files = ["/var/log/mysql/*.log"]## grok pipeline script pathpipeline = "mysql.p"## Config dbm metric [inputs.mysql.dbm_metric]enabled = true## Config dbm sample [inputs.mysql.dbm_sample]enabled = true  ## Config dbm activity[inputs.mysql.dbm_activity]enabled = true  # 开启数据库性能指标采集dbm = true...# 监控指标配置[inputs.mysql.dbm_metric]enabled = true# 监控采样配置[inputs.mysql.dbm_sample]enabled = true# 等待事件采集[inputs.mysql.dbm_activity]enabled = true   ...[inputs.mysql.tags]# some_tag = "some_value"# more_tag = "some_other_value"
  • 重启 DataKit
datakit service -R

高级配置(采集更多性能指标)

Binlog 开启

统计 Binlog 大小,需要开启 MySQL 对应 Binlog 功能(默认情况下,MySQL Binlog 默认是不开启的)。

1、检查状态

-- ON: 开启/OFF: 关闭
SHOW VARIABLES LIKE 'log_bin';

2、开启 Binlog 的步骤

开启 MySQL 的 Binlog 功能主要涉及修改 MySQL 的配置文件并重启服务。

1)编辑 MySQL 配置文件:找到 MySQL 的配置文件 my.cnf 或 my.ini,通常位于 /etc/mysql 目录下,如果找不到可以通过命令 find / -name "my.cnf" 进行查找。

2)添加 Binlog 配置:在配置文件的 [mysqld] 部分添加以下配置:

  • log_bin=ON:开启 Binlog 日志。
  • log_bin_basename=/var/lib/mysql/mysql-bin:指定 Binlog 日志的基本文件名。
  • log_bin_index=/var/lib/mysql/mysql-bin.index:指定 Binlog 文件的索引文件。
  • server-id=1:为 MySQL 服务分配一个唯一的 ID,用于在复制集群中标识服务器 1。

3)简单配置方式:也可以只添加一行配置 log-bin=/var/lib/mysql/mysql-bin,MySQL 会自动设置 log_bin 为 ON 状态,并自动设置 log_bin_index 文件。

4)对于 MySQL 5.7 及以上版本:如果使用的是 5.7 及以上版本,在添加上述配置后,还需要重启 MySQL 服务,否则可能会报错。

5)重启 MySQL 服务:配置完成后,需要重启 MySQL 服务以使配置生效。可以使用命令 service mysqld restart 进行重启。

6)验证 Binlog 是否开启:通过登录 MySQL 并执行 SHOW VARIABLES LIKE '%log_bin%'; 来检查 Binlog 是否已经开启。

7)查看 Binlog 日志:可以通过 SHOW MASTER LOGS; 查看所有 Binlog 日志列表,或者使用 mysqlbinlog 工具查看 Binlog 内容。

3、数据库性能指标采集

修改配置文件(如 mysql.conf),开启 MySQL Performance Schema,并配置相关参数。

[mysqld]
performance_schema = on
max_digest_length = 4096
performance_schema_max_digest_length = 4096
performance_schema_max_sql_text_length = 4096
performance-schema-consumer-events-statements-current = on
performance-schema-consumer-events-waits-current = on
performance-schema-consumer-events-statements-history-long = on
performance-schema-consumer-events-statements-history = on

4、创建存储过程 explain_statement,用于获取 SQL 执行计划

DELIMITER $$
CREATE PROCEDURE datakit.explain_statement(IN query TEXT)SQL SECURITY DEFINER
BEGINSET @explain := CONCAT('EXPLAIN FORMAT=json ', query);PREPARE stmt FROM @explain;EXECUTE stmt;DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

5、consumers 配置

---------------方式1-------------------:DELIMITER $$
CREATE PROCEDURE datakit.enable_events_statements_consumers()SQL SECURITY DEFINER
BEGINUPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;GRANT EXECUTE ON PROCEDURE datakit.enable_events_statements_consumers TO datakit@'%';---------------方式2-------------------:
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
主从复制指标采集

1、前提条件

采集主从复制 mysql_replication 指标的前提是开启主从复制,mysql_replication 指标都是由从数据库采集的。

确认主从复制环境是否正常可以在从数据库输入:

SHOW SLAVE STATUS;

Replica_IO_Running、Replica_SQL_Running 的值均为 Yes,说明主从复制环境状态正常。

2、count_transactions_in_queue

将【组复制插件】添加到服务器在启动时加载的插件列表(group_replication 从 MySQL 版本 5.7.17 开始支持)。在从数据库的配置文件 /etc/my.cnf 中,添加一行。

plugin_load_add ='group_replication.so'

通过 show plugins; 确认组复制插件已安装。

show plugins

3、DataKit mysql 采集器配置

新增以下配置内容:

[[inputs.mysql]]## Set replication to true to collect replication metrics
replication = true
## Set group_replication to true to collect group replication metrics
group_replication = true  
...

关键指标

指标描述类型单位
Aborted_clients因客户端未正常关闭连接而导致连接被终止的次数intcount
Aborted_connects连接到MySQL服务器失败的尝试次数intcount
Binlog_cache_disk_use使用临时二进制日志缓存但超出binlog_cache_size值,并使用临时文件存储事务语句的事务数量intB
Binlog_cache_use使用二进制日志缓存的事务数量intB
Binlog_space_usage_bytes总二进制日志文件大小intB
Bytes_received从所有客户端接收的字节数intB
Bytes_sent向所有客户端发送的字节数intB
Com_commit执行提交语句的次数intcount
Com_delete执行删除语句的次数intcount
Com_delete_multi执行多表删除语句的次数intcount
Com_insert执行插入语句的次数intcount
Com_insert_select执行插入选择语句的次数intcount
Com_load执行加载语句的次数intcount
Com_replace执行替换语句的次数intcount
Com_replace_select执行替换选择语句的次数intcount
Auto_Position如果使用自动定位则为1,否则为0boolcount
Connect_Retry连接重试之间的时间间隔(默认为60秒)。可以通过CHANGE MASTER TO语句设置intcount
Exec_Master_Log_PosSQL线程已读取并执行的当前源二进制日志文件中的位置,标志着下一个要处理的事务或事件的开始intcount
Last_Errno这些列是Last_SQL_Errno的别名intcount
Last_IO_Errno导致I/O线程停止的最近一次错误的错误编号。错误编号为0且消息为空字符串表示“无错误”intcount
Last_SQL_Errno导致SQL线程停止的最近一次错误的错误编号。错误编号为0且消息为空字符串表示“无错误”intcount
Master_Server_Id源的server_id值intcount
Relay_Log_Space所有现有中继日志文件的总大小intcount
Replicas_connected连接到复制源的副本数量intcount
SQL_Delay副本必须落后于源的秒数intcount
Seconds_Behind_Master主服务器和从服务器之间的延迟秒数intcount

更多指标描述,参考观测云官方文档。

日志采集

MySQL 运行日志

如需采集 MySQL 的日志,将配置中 log 相关的配置打开,如需要开启 MySQL 慢查询日志,需要开启慢查询日志,在 MySQL 中执行以下语句:

SET GLOBAL slow_query_log = 'ON';
-- 未使用索引的查询也认为是一个可能的慢查询
set global log_queries_not_using_indexes = 'ON';

注意:在使用日志采集时,需要将 DataKit 安装在 MySQL 服务同一台主机中,或使用其它方式将日志挂载到 DataKit 所在机器。

MySQL 日志分为普通日志和慢日志两种。

MySQL 普通日志

日志原文:

2017-12-29T12:33:33.095243Z         2 Query     SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE CREATE_OPTIONS LIKE '%partitioned%';

切割后的字段列表如下:

字段名字段值说明
statusWarning日志级别
msgSystem table 'plugin' is expected to be transactional.日志内容
time1514520249954078000纳秒时间戳(作为行协议时间)
MySQL 慢查询日志

日志原文:

# Time: 2019-11-27T10:43:13.460744Z
# User@Host: root[root] @ localhost [1.2.3.4]  Id:    35
# Query_time: 0.214922  Lock_time: 0.000184 Rows_sent: 248832  Rows_examined: 72
# Thread_id: 55   Killed: 0  Errno: 0
# Bytes_sent: 123456   Bytes_received: 0
SET timestamp=1574851393;
SELECT * FROM fruit f1, fruit f2, fruit f3, fruit f4, fruit f5

切割后的字段列表如下:

字段名字段值说明
bytes_sent123456发送字节数
db_hostlocalhosthostname
db_ip1.2.3.4IP
db_slow_statementSET timestamp=1574851393;\nSELECT * FROM fruit f1, fruit f2, fruit f3, fruit f4, fruit f5慢查询 SQL
db_userroot[root]用户
lock_time0.000184锁时间
query_id35查询 ID
query_time0.2l4922SQL 执行所消耗的时间
rows_examined72为了返回查询的数据所读取的行数
rows_sent248832查询返回的行数
thread_id55线程 ID
time1514520249954078000纳秒时间戳(作为行协议时间)

如果值是 OFF,请参考阿里云相关 文档 进行开启。

场景视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “mysql”, 选择 “mysql 监控视图”,点击 “确定” 即可添加视图。

MySQL 监控视图

MySQL DBM 监控视图

MySQL Activity 监控视图

MySQL Slow Query 监控视图

监控器(告警)

MySQL 每秒立即获得锁的数过高告警

MySQL 每秒获取锁数量过高会导致性能瓶颈、死锁风险、事务延迟及业务中断,本质是资源争用,需通过优化事务逻辑、降低锁粒度、调整隔离级别和分布式架构等手段解决。

MySQL 慢查询数量过高告警

MySQL 慢查询数量过高会导致数据库性能瓶颈、资源耗尽及业务响应延迟,通常由索引缺失或低效查询引起,需通过优化 SQL 语句、添加索引或调整执行计划解决。

MySQL 由于客户端没有正确关闭连接而中止的连接数过高告警

MySQL 因客户端未正确关闭连接导致的中止连接数过高告警具有显著必要性,其直接危害包括:资源耗竭(占用内存、线程及文件描述符)、性能下降(连接握手与回收开销增大)、稳定性风险(连接泄漏引发服务崩溃)及安全隐患(潜在攻击者利用残留连接)。该告警可帮助及时识别代码缺陷、网络异常或连接池配置问题,通过优化客户端连接释放逻辑、调整 wait_timeout/interactive_timeout 参数、引入连接池管理等方式,避免数据库因“连接雪崩”陷入不可用状态,保障服务高可用性与资源高效利用。

总结

MySQL 指标监控对于维护数据库的健康和性能至关重要。它允许管理员实时跟踪关键性能指标,如查询响应时间、连接数、缓冲池使用情况和磁盘 I/O 活动。通过这些数据,可以识别和解决性能瓶颈,预测资源需求,优化数据库配置,以及确保数据的完整性和安全性。此外,监控还可以帮助检测和防范潜在的攻击,通过观测云设置告警阈值快速响应异常活动,减少系统故障时间,从而提高数据库的可靠性和业务连续性。总之,MySQL 指标监控是数据库管理的核心部分,对于保障企业数据资产的稳定性和高效性起着至关重要的作用。

相关文章:

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;以其高性能、可靠性和易用性而闻名&#xff0c;适用于各种规模的应用&#xff0c;从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…...

系统性能分析基本概念(3) : Tuning Efforts

系统性能调优&#xff08;Tuning Efforts&#xff09;是指通过优化硬件、软件或系统配置来提升性能&#xff0c;减少延迟、提高吞吐量或优化资源利用率。以下是系统性能调优的主要努力方向&#xff0c;涵盖硬件、操作系统、应用程序和网络等多个层面&#xff0c;结合实际应用场…...

OceanBase数据库全面指南(函数篇)函数速查表

文章目录 一、数学函数1.1 基本数学函数1.2 三角函数二、字符串函数2.1 基本字符串函数2.2 高级字符串处理函数三、日期时间函数3.1 基本日期时间函数3.2 日期时间计算函数四、聚合函数4.1 常用聚合函数4.2 分组聚合4.3 高级聚合函数五、条件判断函数5.1 基本条件函数5.2 CASE表…...

SpringBoot 对象转换 MapStruct

文章目录 工作原理核心优势为什么不使用 BeanUtils使用步骤添加依赖定义实体类和VO类定义映射接口测试数据 参考 工作原理 基于 Java 的 JSR 269 规范&#xff0c;该规范允许在编译期处理注解&#xff0c;也就是 Java 注解处理器。MapStruct 通过定义的注解处理器&#xff0c;…...

计算机网络——Session、Cookie 和 Token

在 Web 开发中&#xff0c;Session、Cookie 和 Token 是实现用户会话管理和身份验证的核心技术。它们既有联系&#xff0c;也有明显区别。以下从定义、原理、联系、区别和应用场景等方面详细解析。 一、基本定义与原理 1. Cookie 定义&#xff1a; 是浏览器存储在客户端的小…...

01-jenkins学习之旅-window-下载-安装-安装后设置向导

1 jenkins简介 百度百科介绍&#xff1a;Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 [1] Jenkins官网地址 翻译&…...

Spark,SparkSQL操作Mysql, 创建数据库和表

以下是使用 Spark SQL 在 MySQL 中创建数据库和表的步骤&#xff08;基于 Scala API&#xff09;&#xff1a; 1. 准备工作 - 添加 MySQL 驱动依赖 同前所述&#xff0c;需在 Spark 环境中引入 MySQL Connector JAR 包&#xff08;如 mysql-connector-java-8.0.33.jar &#…...

AttributeError: module ‘cv2.dnn‘ has no attribute ‘DictValue‘错误解决方法

源代码如下&#xff1a; # 读取图像 import cv2 im cv2.imread("./test.png", 1) # 1表示3通道彩色&#xff0c;0表示单通道灰度 cv2.imshow("test", im) # 在test窗口中显示图像 print(type(im)) # 打印数据类型 print(im.shape) # 打印图像尺寸 cv2.wai…...

HarmonyOS 鸿蒙应用开发基础:@Watch装饰器详解及与@Monitor装饰器对比分析

在鸿蒙系统的开发中&#xff0c;状态管理和组件之间的通信是至关重要的部分。为此&#xff0c;鸿蒙提供了多种装饰器来帮助开发者监听和处理数据变化。今天我们将深入探讨Watch装饰器&#xff0c;并与新的状态管理组件V2中的Monitor装饰器进行对比。 Watch装饰器详解 基本概念…...

机器人拖动示教控制

机器人拖动示教控制 机器人拖动视角控制与轨迹记录 1. 知识目标 体验ES机器人拖动视角操作体验ES机器人拖动轨迹记录 2. 技能目标 掌握ES机器人拖动视角操作掌握ES机器人拖动轨迹记录 3. ES机器人拖动视角操作 3.1 操作步骤 点击“拖动视角”按钮长按“启用”键约3秒进入…...

免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷

近日&#xff0c;苏州自动驾驶巴士线路——阳澄数谷示范线正式上线&#xff0c;即日起向全民免费开放试乘体验&#xff01; 在苏州工业园区地铁3号线倪浜•阳澄数谷站外&#xff0c;一辆辆黑、白配色的小巴正在道路上有条不紊地行驶。与普通公交不同的是&#xff0c;小巴造型奇…...

matlab加权核范数最小化图像去噪

加权核范数最小化&#xff08;Weighted Nuclear Norm Minimization, WNNM&#xff09;是一种有效的图像去噪方法&#xff0c;它通过最小化加权核范数来促进图像的低秩近似&#xff0c;同时保留图像的边缘和细节信息。这种方法在去除噪声的同时&#xff0c;能够较好地保留图像的…...

docker容器暴露端口的作用

Docker 镜像中**暴露的端口&#xff08;通过 EXPOSE 指令声明&#xff09;**主要有以下作用和意义&#xff1a; 1. 文档化作用&#xff08;Documentation&#xff09; 显式声明容器内部服务监听的端口&#xff0c;告知用户或开发者该镜像提供的服务需要通过哪些端口通信。例如…...

每日Prompt:像素风格插画

提示词 像素风格插画&#xff0c;日式漫画脸&#xff0c;画面主体为一位站在路边的男孩&#xff0c;人物穿着黑色冲锋衣&#xff0c;手里拿着手机&#xff0c;男孩靠坐在机车旁边&#xff0c;脚边依偎着一只带着小摩托车头盔的小小猫&#xff0c;背景是雨中&#xff0c;身旁停…...

Windows逆向工程提升之二进制分析工具:HEX查看与对比技术

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 十六进制查看工具 应用于逆向工程的知识点 ​编辑 二进制对比工具 应用于逆向工程的知识点 十六进制查看工具 十六进制查看器是逆向工程的基础工具&#xff0c;它可以以十六进制格式…...

Android10如何设置ro.debuggable=1?

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 目录 一、背景 二、如何解决&#xff1f; 三、操作步骤 一、背景 Android 10 开始的限制&#xff1a;ro.debuggable 是只读属性 从 …...

2024游戏安全白皮书:对抗激烈!PC游戏外挂功能数增长超149%,超85%移动外挂为定制挂(附获取方式)

2024 年&#xff0c;中国游戏市场实际销售收入达 3257.83 亿元&#xff0c;同比增长 7.53%&#xff1b;用户规模 6.74 亿人&#xff0c;同比增长 0.94%&#xff0c;再创新高。这份庞大的数据背后&#xff0c;更是对安全防线实力的严峻拷问。 在广东省游戏产业协会的指导下&…...

深度解析:Spark、Hive 与 Presto 的融合应用之道

目录 一、Spark分布式部署基础 1.1 Spark部署模式概述 1.2 Standalone模式部署 1.3 YARN模式部署 1.4 Kubernetes模式部署 1.5 Spark关键配置参数优化 1.6 Spark高可用配置 二、Apache Thrift 在大数据生态中的核心作用 2.1 基础概念 2.2 在大数据中的应用 2.3 Beel…...

12kV 环保气体绝缘交流金属封闭开关设备现场交流耐压试验规范

范围 本文件规定了12kV环保气体绝缘交流金属封闭开关设备现场交流耐压试验的被试设备及试验接线、试验条件、试验步骤、试验判据及异常处理方法。 本文件适用于12kV环保气体绝缘交流金属封闭开关设备现场交流耐压试验&#xff0c;其他气体绝缘交流金属封闭开关设备可参照执行。…...

位图算法——判断唯一字符

这道题有多种解法&#xff0c;可以创建hash数组建立映射关系判断&#xff0c;但不用新的数据结构会加分&#xff0c;因此我们有“加分”办法——用位图。 我们可以创建一个整型变量&#xff08;32位&#xff09;而一共才26个字母&#xff0c;所以我们只要用到0-25位即可&#…...

HarmonyOS 鸿蒙应用开发基础:父组件调用子组件方法的几种实现方案对比

在ArkUI声明式UI框架中&#xff0c;父组件无法直接调用子组件的方法。本文介绍几种优雅的解决方案&#xff0c;并作出对比分析&#xff0c;分析其适用于不同场景和版本需求。帮助开发者在开发中合理的选择和使用。 方案一&#xff1a;Watch装饰器&#xff08;V1版本适用&#x…...

复盘20250522

根据行业前景、公司基本面、技术壁垒及市场催化因素的综合分析&#xff0c;以下两支个股最有可能持续上涨&#xff1a; 1. 汇得科技&#xff08;机器人化工&#xff09; 核心逻辑&#xff1a; 高增长赛道验证&#xff1a;公司动力电池配套产品&#xff08;水冷板缓冲垫、保温…...

【UE5】环形菜单教程

效果 步骤 1. 下载图片资源&#xff1a;百度网盘 请输入提取码 提取码:fjjx 2. 将图片资源导入工程&#xff0c;如下 3. 新建3个控件蓝图&#xff0c;这里分别命名为“WBP_CircularMenu”、“WBP_Highlight”、“WBP_Icon” 4. 打开“WBP_Icon”&#xff0c;设置“所需” 添加…...

Athena 执行引擎:在线服务计算的效率王者

引言 在在线服务领域&#xff0c;计算任务呈现出独特的特性&#xff1a;一方面&#xff0c;数据量通常不会过于庞大&#xff0c;因为在线服务对耗时和响应速度有着严苛要求&#xff1b;另一方面&#xff0c;计算任务具有可控性&#xff0c;其大多并非由用户实时输入动态生成&a…...

飞桨paddle ‘ParallelEnv‘ object has no attribute ‘_device_id‘【已解决】

书借上回&#xff0c;自从我反复重装paddle之后&#xff0c;我发现了&#xff0c;只要pip list中有库&#xff0c;但是代码报错&#xff0c;那就是飞桨没把代码更新完全&#xff0c;只能自己去改源代码 我又遇到报错了&#xff1a; 根据报错信息&#xff0c;找到ParallelEnv报…...

Bert预训练任务-MLM/NSP

MLM MLM:Masked Language Mode:在每一个训练序列中以15%的概率随机地选中某个token进行MASK,当一个token被选中后&#xff0c;有以下三种处理方式&#xff1a; 80%的概率被[MASK]&#xff0c;如my dog is hairy->my dog is [MASK]10%的概率修改为随机的其他token,如my dog …...

微信小程序之Promise-Promise初始用

我们来尝试使用Promise。 1、需求&#xff0c;做个抽奖的按钮&#xff0c; 抽奖规则&#xff1a; 30%的几率中奖&#xff0c;中奖会提示恭喜恭喜&#xff0c;奖品为10万 RMB 劳斯莱斯优惠券&#xff0c;没中奖会提示再接再厉。 2、先搭界面&#xff1a; <view class&qu…...

准备好,开始构建:由 Elasticsearch 向量数据库驱动的 Red Hat OpenShift AI 应用程序

作者&#xff1a;来自 Elastic Tom Potoma Elasticsearch 向量数据库现在被 “基于 LLM 和 RAG 的 AI 生成” 验证模式支持。本文将指导你如何开始使用。 Elasticsearch 已原生集成业内领先的生成式 AI 工具和服务提供商。欢迎观看我们的网络研讨会&#xff0c;了解如何突破 RA…...

spring的注入方式都有什么区别

目录 1. 构造器注入&#xff08;Constructor Injection&#xff09; 2. Setter 注入&#xff08;Setter Injection&#xff09; 3. 字段注入&#xff08;Field Injection&#xff09; 4. 接口注入&#xff08;Interface Injection&#xff09; 主要区别对比 最佳实践 总…...

RNN神经网络

RNN神经网络 1-核心知识 1-解释RNN神经网络2-RNN和传统的神经网络有什么区别&#xff1f;3-RNN和LSTM有什么区别&#xff1f;4-transformer的归一化有哪几种实现方式 2-知识问答 1-解释RNN神经网络 Why&#xff1a;与我何干&#xff1f; 在我们的生活中&#xff0c;很多事情…...