《Kettle集群及Mysql参数调整》由会员分享,可在线阅读,更多相关《Kettle集群及Mysql参数调整(10页珍藏版)》请在人人文库网上搜索。

1、1 Kettle 集群Kettle支持集群,以下只是简单介绍下,没有具体深入,后期需要做几个实际例子实践下。1.1集群介绍集群允许转换以及转换中的步骤在多个服务器上并发执行。在使用 kettle集群时,首先需要定义的是 Cluster schema。所谓的Cluster schema就是一系列的子服务器的集合。在一个集群中,它包含一个主服务器(Master )和多个从属服务器服务器(slave)。如下图所示。1.2定义集群服务器要让转换是以集群方式执行,首先需要在Spoon中进行图形化的设计工作。定义一个以集群方式运行的转换,主要包括定义cluster schema和定义转换两个步骤。在spo。

2、on中定义集群服务器。tl Sk执,= 5Q(汽本 nt横叩* ( p斤許厅SQU车tl Hops (Jfln子的着* KHEIUHGE査*若irryi+Web ApP|0|1磁皿乂-*ll ih.-. 51,non -I-匕刊越器空 master密 $ldve_l1.3执行转换要想以集群方式来运行转换或者作业,首先需要启动在Cluster schema中定义的主服务器和从属服务器,然后再运行转换或者作业。1.3.1启动子服务器子服务器其实是一个嵌入式的名为Carte的小web server。要进行集群转换,首先需要启动cluster schema中的子服务器1.3.2运行转换Ketlte三个。

3、选项来决定转换是以什么方式来执行本地执行:转换或者作业将在你现在使用的JVM中运行。远程执行:允许你指定一个想运行转换的远程服务器。这需要你在远程服 务器上安装 Pentaho Data Integration ( Kettle )并且运行Carte子服务 器。集群方式执行:允许你在集群环境下执行作业或者转换当选择“集群方式执行”选项是,选择以下的选项提交转换:分解转换并且将转换提交到不同的主服务器和从属服务器。准备执行:它将在主服务器和从属服务器上执行转换的初始化阶段。开始执行:它将在主服务器和从属服务器中执行实际的转换任务。显示转换:显示将要在集群上执行的生成的转换(可以参看下面的分析).。

4、2 Mysql参数优化主要参照 http:/blog.csdn.net/nightelve/article/details/17393631针对目前mysql的版本及硬件配置保留重要参数的摘要,对默认值情况调整, 具体见以下步骤。目前开发机器硬件配置如下:1 个 CPU,8核;内存是16G软件配置:centos 6.5Mysql 5.6涉及到的主要参数有以下几种2.1 back_log修改back_log参数值:默认的80back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是 说,如果MySql的连接数据达到 max_connections时,新来。

5、的请求将会被存在堆栈中,以等待某一连接释 放资源,该堆栈的数量即 back_log,如果等待连接的数量超过 back_log,将不被授予连接资源。将会报: unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL的待连接进程时.back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的 TCP/IP连接的 侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为 2048。对于Linux系统推荐设置为小于512。

6、的整数。修改系统内核参数,)http:/www.51testing.com/html/64/n-810764.html查看mysql当前系统默认back_log值,命令: show variables like back_log:查看当前数量2.2 max_user_connections修改max_user_connections值,由默认的0,修改为800max_user_c onnection s=800max_user_connections是指每个数据库用户的最大连接针对某一个账号的所有客户端并行连接到 MYSQ服务的最大并行连接数。简 单说是指同一个账号能够同时连接到 mysql服。

7、务的最大连接数。设置为0表示不 限制。目前默认值为:0不受限制。这儿顺便介绍下Max_used_connections:它是指从这次mysql服务启动到现 在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。 如果在过去某一个时刻,MYSQ服务同时有1000个请求连接过来,而之后再也 没有出现这么大的并发请求时,贝U Max_used_connections=1000.请注意与show variables 里的 max_user_connections 的区别。默认为 0表示无限大。查看 max_user_connections 值show variables like m。

8、ax_user_c onn ecti on s;2.3 thread_concurrency修改thread_concurrency 值,由目前默认的10,修改为16 thread_c on curre ncy=16thread_concurrency 的值的正确与否,对mysql的性能影响很大,在多个c pu(或多核)的情况下,错误设置了 thread_concurrency 的值,会导致mysql不 能充分利用多cpu(或多核),出现同一时刻只能一个cpu(或核)在工作的情况。thread_concurrency 应设为CPU核数的2倍.比如有一个双核的 CPU,那t hread_conc。

9、urrency 的应该为 4; 2 个双核的 cpu, thread_concurrency 的值应 为8.比如:根据上面介绍我们目前系统的配置,可知道为1个CPU每个CPU为8核,按照上面的计算规则,这儿应为:1*8*2=16查看系统当前thread_concurrency 默认配置命令:show variables like thread_c on curre ncy;2.4 MySQL缓存变量介绍及修改数据库属于io密集型的应用程序,其主职责就是数据的管理及存储工作。 而我们知道,从内存中读取一个数据库的时间是微秒级别, 而从一块普通硬盘上 读取一个10是在毫秒级别,二者相差3个数量级。。

10、所以,要优化数据库,首先 第一步需要优化的就是10,尽可能将磁盘I0转化为内存10。本文先从MySQL 数据库I0相关参数(缓存参数)的角度来看看可以通过哪些参数进行I0优化241全局缓存启动MySQL寸就要分配并且总是存在的全局缓存。目前有:key_buffer_size(默认值:8388608,即 8M)、innodb_buffer_pool_size(默认值:134217728即:128M) innodb_additional_mem_pool_size(默认值:8388608 即:8M innodb_log_buffer_size (默认值:8388608 即:8M)、query_ca。

11、che_size(默认值: 1048576 即:1M)等 五个。这些变量值都可以通过命令如:show variables like 变量名;查看到。2.4.1.1 key_buffer_sizekey_buffer_size, 本系统目前为8M,可修改为400M key_buffer_size=400Mkey_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),对MylSAM(MySQ表存储的一种类型,可以百度等 查看详情)表性能影响最大的一个参数。如果你使它太小,系统将开始换页并且 真的变慢了。严格说是它决定了数据库索引处理的速度,尤其是索引读的速。

12、度。 对于内存在4GB左右的服务器该参数可设置为 256M或384M.怎么才能知道key_buffer_size 的设置是否合理呢,一般可以检查状态值K ey_read_requests 和 Key_reads ,比例 key_reads / key_read_requests 应 该尽可能的低,比如1:100,1:1000 ,1:10000。其值可以用以下命令查得:sh ow status like key_read%;比如查看系统当前 key_read和key_read_request值为:+| Variable, name | Value |+| Key_read_requests | 。

13、28535 | Key_reads | 269 |+可知道有28535个请求,有269个请求在内存中没有找到直接从硬盘读取索引未命中缓存的概率为:0.94%=269/28535*100%. 般未命中概率在 0.1之 下比较好。目前已远远大于 0.1,证明效果不好。若命中率在0.01以下,则建 议适当的修改key_buffer_size 值。http:/dbahacker.eom/mysql/innodb-myisam-compare(lnnoDB与 MylSAM的六大区别)http:/kb.cnblogs.com/page/99810/(查看存储引擎介绍)MyISAM InnoDB、MyISA。

14、M Merge引擎、InnoDB memory(heap)、archive2.4.1.2 innodb_buffer_pool_sizeinn odb_buffer_pool_size(默认 128M)inn odb_buffer_pool_size=1024M(1G)innodb_buffer_pool_size:主要针对InnoDB表性能影响最大的一个参数。功能与 Key_buffer_size 样。InnoDB 占用的内存,除 innodb_buffer_pool_s ize用于存储页面缓存数据外,另外正常情况下还有大约8%勺开销,主要用在每 个缓存页帧的描述、adaptive hash。

15、等数据结构,如果不是安全关闭,启动时还 要恢复的话,还要另开大约12%勺内存用于恢复,两者相加就有差不多21%勺开销。假设:12G的innodb_buffer_pool_size,最多的时候InnoDB就可能占用到14.5G的内存。若系统只有16G 而且只运行 MySQL且MySQ只用InnoDB, 那么为MySQl开12Q是最大限度地利用内存了。另外InnoDB和MyISAM存储引擎不同,MyISAM的key_buffer_size 只能 缓存索引键,而innodb_buffer_pool_size却可以缓存数据块和索引键。适当的增加这个参数的大小,可以有效的减少InnoDB类型的表的磁盘I。

16、/O 。当我们操作一个InnoDB表的时候,返回的所有数据或者去数据过程中用到 的任何一个索引块,都会在这个内存区域中走一遭。可以通过(Inno db_buffer_pool_read_requests- Inno db_buffer_pool_reads) / I nn odb_buffer_pool_read_requests * 100%计算缓存命中率,并根据命中率来调整innodb_buffer_pool_size 参数大小进行优化。值可以用以下 命令查得:show status like Inno db_buffer_pool_read%;比如查看当前系统中系统中| Inn odb_。

17、buffer_pool_read_requests| 1283826 | Inno db_buffer_pool_reads| 519|+其命中率 99.959%= (1283826-519) /1283826*100% 命中率越高越好。2.4.1.3 innodb_additional_mem_pool_sizeinnodb_additional_mem_pool_size( 默认 8M)inno db_additio nal_mem_pool_size= 100Minnodb_additional_mem_pool_size设置了 InnoDB 存储引擎用来存放数据字典信息以及一些内部数据。

18、结构的内存空间大小,所以当我们一个MySQL Instanee中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数 据都能存放在内存中提高访问效率的。这个参数大小是否足够还是比较容易知道的,因为当过小的时候,MySQ会记录Warning信息到数据库的error log 中,这时候你就知道该调整这个参数大 小了。查看当前系统 mysql的error日志eat /var/lib/mysql/ 机器名.error 发现有很多waring警告。所以要调大为20M.根据MySQ手册,对于2G内存的机器,推荐值是20M32G 内存的100M2.4.1.4 innodb_log_buffer_。

19、sizeinnodb_log_buffer_size(默认 8M)inno db_log_buffer_size=20Minnodb_log_buffer_size这是InnoDB存储引擎的事务日志所使用的缓冲区。类似于Binlog Buffer ,InnoDB在写事务日志的时候,为了提高性能, 也是先将信息写入Innofb Log Buffer 中,当满足innodb_flushog_trx_comm it参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件 (或者同步到磁盘)中。可以通过innodb_log_buffer_size参数设置其可以使用的最大内存空间。Inn oD。

20、B 将日志写入日志磁盘文件前的缓冲大小。理想值为1M至8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。在my.cnf中以数字格式设置。默认是8MB系的如频繁的系统可适当增大至 4MB-8MB当然如上面介绍所 说,这个参数实际上还和另外的flush参数相关。一般来说不建议超过 32MB注:innodb_flushog_at_trx_commit参数对 InnoDB Log 的写入性能有非常关键的影响,默认值为1。该参数可以设置为0, 1, 2,解释如下:0: log buffer 中的数据将以每。

21、秒一次的频率写入到 log file 中,且同时 会进行文件系统到磁盘的同步操作,但是每个事务的commit并不会触发任何lo g buffer 到log file 的刷新或者文件系统到磁盘的刷新操作;1 :在每次事务提交的时候将log buffer中的数据都会写入到log file ,同时也会触发文件系统到磁盘的同步;2:事务提交会触发log buffer 到log file的刷新,但并不会触发磁盘文件系统到磁盘的同步。此外,每秒会有一次文件系统到磁盘同步操作。实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要22。

22、9秒。因此, MySQ手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。根 据MySQ手册,在存在丢失最近部分事务的危险的前提下,可以把该值设为0。2.4.1.5 query_cache_sizequery_cache_size( 默认 1M) query_cache_type=1(默认是 OFF) query_cache_size=40Mquery_cache_size: 主要用来缓存 MySQ中的ResultSet,也就是一条 SQL 语句执行的结果集,所以仅仅只能针对select语句。当我们打开了 Query Cache功能,MySQ在接受到一条select语句的请求后,如果。

23、该语句满足 Query Ca che的要求(未显式说明不允许使用 Query Cache,或者已经显式申明需要使用 Q uery Cache) ,MySQI会直接根据预先设定好的 HASH算法将接受到的select语 句以字符串方式进行hash,然后到Query Cache中直接查找是否已经缓存。也 就是说,如果已经在缓存中,该 select请求就会直接将数据返回,从而省略了 后面所有的步骤(如SQL语句的解析,优化器优化以及向存储引擎请求数据等),极大的提高性能。根据 MySQL用户手册,使用查询缓冲最多可以达到238%勺效率。当然,Query Cache也有一个致命的缺陷,那就是当某个表的。

24、数据有任何任 何变化,都会导致所有引用了该表的select语句在Query Cache中的缓存数据失效。所以,当我们的数据变化非常频繁的情况下,使用Query Cache可能会得不偿失Query Cache的使用需要多个参数配合,其中最为关键的是query_cache_size和query_cache_type,前者设置用于缓存ResultSet的内存大小,后者设 置在何场景下使用Query Cache。在以往的经验来看,如果不是用来缓存基本不 变的数据的MySQL数据库,query_cache_size 般256MB是一个比较合适的大 小。当然,这可以通过计算 Query Cache的命中率。

25、(Qcache_hits/(Qcache_hits +Qcache_inserts)*100)来进行调整。query_cache_type 可以设置为 0(OFF), 1(ON)或者2(DEMOND)分别表示完全不使用query cache,除显式要求不使用q uery cache( 使用 sql_no_cache)之外的所有的 select 都使用 query cache,只 有显示要求才使用 query cache(使用 sql_cache)。女口果 Qcache_lowmem_prunes 的值非常大,则表明经常出现缓冲.如果Qcache_hits的值也非常大,则表明查 询缓冲使用非常频。

26、繁,此时需要增加缓冲大小;根据命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100)进行调整,一般不建议太大,256MB可能已经差不多了,大型的配置型静态数据可适当调大.可以通过命令:show status like Qcache_%; 查看目前系统 Query catch 使用大小| Qcache_hits| 1892463 | Qcache_i nserts | 35627命中率 98.17%=1892463/(1892463 +35627 )*100242局部线程缓存除了全局缓冲,MySql还会为每个连接发放连接缓冲。个连接到MySQ田服务器的。

27、线程都需要有自己的缓冲。大概需要立刻分配256K,甚至在线程空闲时,它们使用默认的线程堆栈,网络缓存等。事务开始之后,则需要增加更多的空间。 运行较小的查询可能仅给指定的线程增加少量的内存消耗,然而如果对数据表做复杂的操作例如扫描、排序或者需要临时表,则需分配大约read_buffer_size ,sort_buffer_size , read_rnd_buffer_size ,tmp_table_size大小的内存空间不过它们只是在需要的时候才分配,并且在那些操作做完之后就释放了。 有的是立刻分配成单独的组块。tmp_table_size 可能高达MySQ所能分配给这 个操作的最大内存空间了。

28、注意,这里需要考虑的不只有一点一一可能会分配多个同一种类型的缓存, 例如用来处理子查询。一些特殊的查询的内存使用量可能更大如果在MylSAM表上做成批的插入时需要分配 bulk_insert_buffer_size大小的内存;执行ALTER TABLE OPTIMIZE TABLE REPAIR TABLE命令时需要分配 myisam_sor t_buffer_size 大小的内存。2.4.2.1 read_buffer_sizeread_buffer_size(默认值:131072 即 0.125M)read_buffer_size=4Mread_buffer_size 是MySql读入缓冲。

29、区大小。对表进行顺序扫描的请求将 分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size 变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频 繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能2422 join_buffer_sizejoin_buffer_size (默认值:262144 即 0.125M)join _buffer_size =4M应用程序经常会出现一些两表(或多表)Join的操作需求,MySQI在完成某些 Join 需求的时候(all/index join ),为了减少参与Join的“被驱动表”的读 取次。

30、数以提高性能,需要使用到 Join Buffer 来协助完成Join操作。当JoinBuffer 太小,MySQL不会将该Buffer 存入磁盘文件,而是先将 Join Buffer 中的结果集与需要Join的表进行Join操作,然后清空Join Buffer 中的数 据,继续将剩余的结果集写入此 Buffer中,如此往复。这势必会造成被驱动表 需要被多次读取,成倍增加10访问,降低效率。2423 sort_buffer_sizesort_buffer_size(默认值:262144 即 0.25M)sort_buffer_size=4Msort_buffer_size 是MySql执行排序使。

31、用的缓冲大小。如果想要增加O RDER BY勺速度,首先看是否可以让 MySQL用索引而不是额外的排序阶段。如 果不能,可以尝试增加sort_buffer_size变量的大小2424 tmp_table_sizetmp_table_size(默认值:16777216 即: 16M)tmp_table_size=16Mtmp_table_size是MySql的heap (堆积)表缓冲大小。所有联合在一个 DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。大多数临时 表是基于内存的(HEAP康。具有大的记录长度的临时表(所有列的长度的和)或 包含BLOB列的表存储在硬盘上。如果某个内部。

32、 heap (堆积)表大小超过tmp_t able_size , MySQI可以根据需要自动将内存中的 heap表改为基于硬盘的 MylSA M表。还可以通过设置tmp_table_size 选项来增加临时表的大小。也就是说, 如果调高该值,MySql同时将增加heap表的大小,可达到提高联接查询速度的 效果。243 thread_cache_sizethread_cache_size ( 服务器线程缓存)thread_cache_size=64默认的thread_cache_size=9,但是看到好多配置的样例里的值一般是32,64,甚至是128,感觉这个参数对优化应该有帮助,于是查了下:根。

33、据调查发现以上服务器线程缓存thread_cache_size没有进行设置,或者 设置过小,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如 果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那 么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被 重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较Connections 和Threads_created 状态的变量,可以看到这个变量的作用。(- 表示要调整的值)根据物理内存设置规则如下:1G 82G 163G 323G 64mysql show status like thread%;-+| Variable, name | Value |+-+-+| Threads_cached | 0| show status like %c onn ecti on %;+-+-+| Variable, name| Value |+-+-+| Connections| 1504 |- 服务启动以来,历史连接数| Max_used_c onnections | 2 |+-+-+通过连接线程池的命中率来判断设置值是否合适?命中率超过90沖上,设定合理。(Conn ecti ons - Threads_created) / Conn ecti ons * 100 。

kettle mysql 参数,Kettle集群及Mysql参数调整相关推荐

  1. MySQL Percona PXC集群实现MySQL主从复制强一致性

    简介 不同于MySQL的主从复制只能在主节点写入数据的是,PXC可以在任何一个节点写入数据.基于MySQL Percona版本. 架构 部署安装PXC 需要注意的是:要先启动第一个节点(PXC初始化) ...

  2. MySQL优化和集群

    MySQL优化和集群 一 MySQL 调优 1.1 MySQL调优方向 ① 表的设计合理化(符合3NF) ② 分表技术(水平分割.垂直分割) ④ 读写[写: update/delete/add]分离 ...

  3. 企业主流MySQL高可用集群

    选型 10款常见MySQL高可用方案选型解读 MYSQL(高可用方案) 目前最流行的是:主从复制.基于Galera的方案 企业主流MySQL高可用集群 了解 MySQL 集群之前,先看看单节点数据库的 ...

  4. mysql mgr简介_mysql8.0初探:(二)MySQL Group Replication-MGR集群简介

    mysql8.0初探:(二)MySQL Group Replication-MGR集群简介 发布时间:2020-06-12 23:59:17 来源:51CTO 阅读:49832 作者:arthur37 ...

  5. mysql集群初始化配置_集群Cluster MySQL的安装配置和使用

    集群Cluster MySQL的安装配置和使用 发布时间:2020-05-28 14:20:03 来源:亿速云 阅读:233 作者:鸽子 MySQL Cluster MySQL集群 基本概念: &qu ...

  6. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

  7. mysql mgr CONSuL_Mysql MGR + Consul + Consul-template + Haproxy 搭建mysql 高可用集群 (三)...

    使用consul做服务发现 Consul是一款用Go开发的分布式服务协调管理的工具,它提供了服务发现,健康检查,Key/Value存储等功能,并且支持跨数据中心的功能. 这里用consul来做mysq ...

  8. g hub安装失败_树莓派k8s集群安装mysql及监控

    安装准备 树莓派k8s集群 root@pi4-master01:~# kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-I ...

  9. MySQL 部署PXC集群

    目录 MySQL 部署PXC集群 PXC集群概述 PXC介绍 PXC特点 相应端口 主机角色 配置主机名及映射关系 部署PXC 安装软件 配置服务 启动服务 测试配置 测试集群高可用 常见错误 MyS ...

最新文章

  1. java基础面试题整理-2021
  2. MySQL从主从到代理
  3. Python正则表达式之扩展语法(5)
  4. python反向缩进_在Pycharm中对代码进行注释和缩进的方法详解
  5. 你周围需要这6种人(文摘)
  6. C语言精髓篇|函数的参数和返回值
  7. LeetCode MySQL 185. 部门工资前三高的所有员工(dense_rank)
  8. 这个保守的 RNA motif是病毒侵染的关键
  9. c++ list sort方法
  10. 2021-2025年中国宠物美容台行业市场供需与战略研究报告
  11. 2003服务器系统驱动精灵,万能驱动助理 e驱动 6.1.2014.0516 for XP/win2003 32位专版
  12. 向量自回归VAR模型、结构向量自回归SVAR模型、VMA模型
  13. 手机CPU处理器大解析
  14. ESC/POS常用打印指令面向对象封装,PHP处理二维码定位,微信小程序蓝牙打印
  15. 计算机网络——基础篇
  16. C++ 输入输出(cin cout)加速/效率优化
  17. 微信小程序开发之webview组件内网页实现微信原生支付
  18. 线性代数:矩阵的LU分解
  19. 零和博弈中范式概率的计算
  20. 阿米洛键盘取消win_阿米洛键盘取消win_阿米洛蓝牙键盘无线连接Ubuntu16.04和windows10双系统的方法...

热门文章

  1. threadmainjava.lang.NoClassDefFoundError:ServerProgram.java 抛出异常~
  2. antd-design-pro项目引用微前端,使用qiankun实现动态路由加载
  3. 自研框架(Webx)整合Zuul网关工作总结
  4. 奇异值分解(SVD)的原理详解及推导
  5. 详解图像形态学中的击中击不中变换操作(HMT),并提醒大家OpenCV4中的击中击不中变换操作是有问题的
  6. linux xmodem,linux xmodem
  7. java获取两个日期之间的所有日期(包括开始日期和结束日期)
  8. 开集在仿射函数取0的点的微调变号
  9. 计算机专业读研三年,到底值不值!
  10. 【脚本项目源码】Python制作桌面宠物,这么可爱的萌宠你不想拥有吗?