中国手机贡献了力量,事件记录

原标题:三星手机今年出货量或跌破3亿,中国手机贡献了力量

原标题:新iPhone要推出双卡双待这事是真的吗

原标题:事件记录 | performance_schema全方位介绍(三)

市调机构Strategy Analytics发布报告预测三星今年的智能手机出货量将跌穿3亿部至2.985亿,是近几年来的新低,笔者认为这是因为中国手机在全球的猛烈进攻所致。

图片 1

图片 2

图片 3

自2007年发布以来,iPhone似乎一直都是“异类”——以自己独特的方式走着一条引领智能手机前进的路!如,在当年遍地按键键盘的年代,iPhone以触摸屏的奇葩姿态引领了新潮流;刚推出时被认为是“反人类设计”的type-c接口,如今也成为了主流;土豪金配色,因iPhone而变得不庸俗甚至更加高大上;刘海屏也因iPhone率先使用,而成为决定一款手机销量的重要因素……

导语

中国手机全球出击

可以看到,苹果一次次不合常规的做法,却始终能够成为手机厂商竞争追捧的标杆。当然,苹果的某些坚持也被认为不合时宜。如,不支持存储卡扩展、没有双卡双待功能等。而让人意外的是,苹果近年来却似乎尤为注意为中国市场做出改变。

在上一篇 《配置详解 | performance_schema全方位介绍》中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山。相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共6个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。

中国手机品牌在国内市场的份额已近九成,在国内市场夯实了基础之后,近几年它们正纷纷出海,仅仅海外市场,并充分发挥各自的优势抢食三星的市场份额。

或许,苹果终于认识到中国市场的重要性,并进行了积极主动的改变。如,Siri早已能听懂包括上海话等内在的中国多个方言、苹果提供开放接口以让中国消费者获得防骚扰的贴心功能、Apple Pay在中国市场的补贴越来越多……

等待事件表

华为是最先在海外市场取得成功的中国手机品牌,其在国内市场取得优势后迅速出击海外市场。在早期华为更关注利润较高的欧洲市场,由于它在欧洲通信设备市场占据优势,与运营商建立了良好的关系,其在欧洲市场发展顺利,甚至在部分国家如西班牙、芬兰等地已取得智能手机市场份额前两名。目前华为也开始进军此前被它忽视的新兴市场,并在今年首次跻身印度智能手机市场份额前五名、在俄罗斯智能手机市场已位居第一名。

图片 4

通常,我们在碰到性能瓶颈时,如果其他的方法难以找出性能瓶颈的时候(例如:硬件负载不高、SQL优化和库表结构优化都难以奏效的时候),我们常常需要借助于等待事件来进行分析,找出在MySQL Server内部,到底数据库响应慢是慢在哪里。

国产四强中的小米、OPPO、vivo则因专利实力不足,选择进军新兴市场。小米当下在海外市场做得最为成功的无疑是印度市场,其在印度智能手机市场正与三星争夺第一名;OPPO则率先进入东南亚市场并位居该市场第二名;vivo已在印度智能手机市场夺得份额第三名。目前小米和OPPO都开始进军欧洲市场,小米在欧洲市场更已夺得市场份额第四名。

而苹果究竟会不会在下一代iPhone上采用双卡双待功能,早已成为业内关注的焦点。毕竟对于中国消费者来说,双卡双待这一功能绝对是刚需。可惜的是,此前iPhone一直没有提供这一功能。如果下一代iPhone加上这一功能,绝对能成为爆款!

等待事件记录表包含三张表,这些表记录了当前与最近在MySQL实例中发生了哪些等待事件,时间消耗是多少。

除此之外,中兴、联想等在美国市场也获得了可观的市场份额,中兴更一度跻身美国智能手机市场份额第四名,只不过因近期众所周知的原因中兴可能在美国智能手机市场要受到一些挫折。在非洲市场,中国手机品牌传音则成为王者,占据第一位的市场份额。

据目前各大媒体的爆料来看,苹果将发布三款全新iPhone。抛开其他方面不谈,据了解5.8英寸和6.5英寸的新款iPhone都具备双卡功能,但在配置上有所差异。其中5.8英寸版本为实体SIM+虚拟SIM卡组合,而6.5英寸则为双实体SIM卡和实体SIM卡+虚拟SIM卡两种版本。

  • events_waits_current表:记录当前正在执行的等待事件的,每个线程只记录1行记录
  • events_waits_history表:记录已经执行完的最近的等待事件历史,默认每个线程只记录10行记录
  • events_waits_history_long表:记录已经执行完的最近的等待事件历史,默认所有线程的总记录行数为10000行

中国手机品牌在全球市场四处出击,正在快速提升它们在全球的市场份额,IDC发布的数据显示今年二季度全球前五大手机品牌当中有三家是中国手机品牌,分别是华为、小米、OPPO,位居第二、第四、第五名,其中华为、小米同比增速分别高达40.9%、48.8%,OPPO的增速也有5.1%,它们合计的市场份额已达到33.7%,超过了三星和苹果之和。

甚至就连运营商都做了一次“猪队友”——中国移动和中国电信等运营商已开始预热新款iPhone的双卡功能。尤其是中国电信的宣传海报直截了当地提到,“新iPhone即将上市,双卡全网通,你姗姗来迟,我等候已久”。看来,新款iPhone具备双卡双待功能已经是板上钉钉的事儿了。

要注意:等待事件相关配置中,setup_instruments表中绝大部分的等待事件instruments都没有开启(IO相关的等待事件instruments默认大部分已开启),setup_consumers表中waits相关的consumers配置默认没有开启

三星手机出货量出现较快下滑

图片 5

events_waits_current 表

此前数年,中国手机品牌主要是在国内市场扩张,三星在中国智能手机市场的份额快速从约20%下跌至目前的0.8%,但是凭借在中国以外的市场所占有的优势,其季度出货量还能保持在7700万或以上,第一的位置相当巩固。

当然,要想享受到双卡双待版的iPhone,你得先准备好money。来自零售渠道和运营商的消息显示,5.8英寸国行iPhone的起售价为7388元,6.5英寸的起售价则为8388元,而顶配版的价格则将过万!但不管怎么说,有了双卡双待功能的iPhone一定会大卖一波的!

events_waits_current表包含当前的等待事件信息,每个线程只显示一行最近监视的等待事件的当前状态

不过随着中国手机品牌在全球的扩张,三星手机的市场地位正进一步受到挑战,IDC发布的今年二季度的数据显示其出货量同比下跌10.4%至7150万部,是近几年的季度新低,这凸显出中国手机品牌在全球的扩张开始给它造成负面影响。

说实话,看到苹果这么重视中国市场自然是让人欣喜的。只不过,如果没有其他更多的革新,iPhone在下一年还能引领智能手机行业继续前行吗?(科技新发现 康斯坦丁/文)返回搜狐,查看更多

在所有包含等待事件行的表中,events_waits_current表是最基础的数据来源。其他包含等待事件数据表在逻辑上是来源于events_waits_current表中的当前事件信息(汇总表除外)。例如,events_waits_history和events_waits_history_long表中的数据是events_waits_current表数据的一个小集合汇总(具体存放多少行数据集合有各自的变量控制)

在三星手机的出货量出现下滑的同时,苹果在今年二季度的出货量却保持了平稳,IDC的数据显示iPhone的出货量同比微增0.7%。这是因为中国手机品牌均采用安卓系统,而三星手机所采用的操作系统同样为安卓系统,都归于安卓阵营,这导致中国手机品牌的成长首先威胁的就是同为安卓阵营的三星。

责任编辑:

表记录内容示例(这是一个执行select sleep(100);语句的线程等待事件信息)

三星手机的出货量下滑也与它对中低端市场关注度不足有关,在2013年其在手机市场的份额达到超过三成的巅峰之后,它开始将关注点放在利润方面,主要发展高端手机,大幅缩减中低端手机机型,目前其在中国电商旗舰店仅有两款中端机型在售,没有低端机型,而中国手机普遍在中低端市场占据优势,这是导致其市场份额不断滑落的原因。

root@localhost : performance _schema 12:15:03> select * from events_waits _current where EVENT_NAME='wait/synch/cond/sql/Item _func_sleep::cond'G;

三星似乎已认识到这种错误,近期其宣布将更多创新科技引入中端机型,希望在中端市场与中国手机进行竞争;在印度市场三星则已开始关注低端手机市场,今年发布了多款千元人民币的低端手机Galaxy J系列,并依靠这些低端机型在今年二季度重夺了印度智能手机市场份额第一名。

*************************** 1. row ***************************

不过就目前来说,显然三星的反击力度还不够强、动作也不够快,这应该是导致市调机构Strategy Analytics预估它今年的智能手机出货量跌穿3亿部的原因,面对这种局面,它要想迅速挽救市场份额,需要以更迅速的变革应对中国手机品牌的挑战,以避免出货量出现更大幅度的下滑。返回搜狐,查看更多

THREAD_ID: 46

责任编辑:

EVENT_ID: 140

END_EVENT_ID: NULL

EVENT_NAME: wait/synch/cond/sql/Item_func_sleep::cond

SOURCE: item_func.cc:5261

TIMER_START: 14128809267002592

TIMER_END: 14132636159944419

TIMER_WAIT: 3826892941827

SPINS: NULL

OBJECT_SCHEMA: NULL

OBJECT_NAME: NULL

INDEX_NAME: NULL

OBJECT_TYPE: NULL

OBJECT _INSTANCE_BEGIN: 140568905519072

NESTING _EVENT_ID: 116

NESTING _EVENT_TYPE: STATEMENT

OPERATION: timed_wait

NUMBER _OF_BYTES: NULL

FLAGS: NULL

1 row in set (0.00 sec)

上面的输出结果中,TIMER_WAIT字段即表示该事件的时间开销,单位是皮秒,在实际的应用场景中,我们可以利用该字段信息进行倒序排序,以便找出时间开销最大的等待事件。

events_waits_current表完整的字段含义如下:

THREAD_ID,EVENT_ID:与事件关联的线程ID和当前事件ID。THREAD_ID和EVENT_ID值构成了该事件信息行的唯一标识(不会有重复的THREAD_ID+EVENT_ID值)

END_EVENT_ID:当一个事件正在执行时该列值为NULL,当一个事件执行结束时把该事件的ID更新到该列

EVENT_NAME:产生事件的instruments名称。该名称来自setup_instruments表的NAME字段值

SOURCE:产生该事件的instruments所在的源文件名称以及检测到该事件发生点的代码行号。您可以查看源代码来确定涉及的代码。例如,如果互斥锁、锁被阻塞,您可以检查发生这种情况的上下文环境

TIMER_START,TIMER_END,TIMER_WAIT:事件的时间信息。单位皮秒(万亿分之一秒)。 TIMER_START和TIMER_END值表示事件开始和结束时间。 TIMER_WAIT是事件经过时间(即事件执行了多长时间)

  • 如果事件未执行完成,则TIMER_END为当前计时器时间值(当前时间),TIMER_WAIT为目前为止所经过的时间(TIMER_END - TIMER_START)
  • 如果采集该事件的instruments配置项TIMED = NO,则不会收集事件的时间信息,TIMER_START,TIMER_END和TIMER_WAIT在这种情况下均记录为NULL

SPINS:对于互斥量和自旋次数。如果该列值为NULL,则表示代码中没有使用自旋或者说自旋没有被监控起来

OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE,OBJECT_INSTANCE_BEGIN:这些列标识了一个正在被执行的对象,所以这些列记录的信息含义需要看对象是什么类型,下面按照不同对象类型分别对这些列的含义进行说明:

* 对于同步对象(cond,mutex,rwlock):

* 1)、OBJECT_SCHEMA,OBJECT_NAME和OBJECT_TYPE列值都为NULL

* 2)、OBJECT_INSTANCE_BEGIN列是内存中同步对象的地址。OBJECT_INSTANCE_BEGIN除了不同的值标记不同的对象之外,其值本身没有意义。但OBJECT_INSTANCE_BEGIN值可用于调试。例如,它可以与GROUP BY OBJECT_INSTANCE_BEGIN子句一起使用来查看1,000个互斥体(例如:保护1,000个页或数据块)上的负载是否是均匀分布还是发生了一些瓶颈。如果在日志文件或其他调试、性能工具中看到与该语句查看的结果中有相同的对象地址,那么,在你分析性能问题时,可以把这个语句查看到的信息与其他工具查看到的信息关联起来。

* 对于文件I/O对象:

* 1)、OBJECT_SCHEMA列值为NULL

* 2)、OBJECT_NAME列是文件名

* 3)、OBJECT_TYPE列为FILE

* 4)、OBJECT_INSTANCE_BEGIN列是内存中的地址,解释同上

* 对于套接字对象:

* 1)、OBJECT_NAME列是套接字的IP:PORT值

* 2)、OBJECT_INSTANCE_BEGIN列是内存中的地址,解释同上

* 对于表I/O对象:

* 1)、OBJECT_SCHEMA列是包含该表的库名称

* 2)、OBJECT_NAME列是表名

* 3)、OBJECT_TYPE列值对于基表或者TEMPORARY TABLE临时表,该值是table,注意:对于在join查询中select_type为DERIVED,subquery等的表可能不记录事件信息也不进行统计

* 4)、OBJECT_INSTANCE_BEGIN列是内存中的地址,解释同上

INDEX_NAME:表示使用的索引的名称。PRIMARY表示使用到了主键。 NULL表示没有使用索引

NESTING_EVENT_ID:表示该行信息中的EVENT_ID事件是嵌套在哪个事件中,即父事件的EVENT_ID

NESTING_EVENT_TYPE:表示该行信息中的EVENT_ID事件嵌套的事件类型。有效值有:TRANSACTION,STATEMENT,STAGE或WAIT,即父事件的事件类型,如果为TRANSACTION则需要到事务事件表中找对应NESTING_EVENT_ID值的事件,其他类型同理

OPERATION:执行的操作类型,如:lock、read、write、timed_wait

NUMBER_OF_BYTES:操作读取或写入的字节数或行数。对于文件IO等待,该列值表示字节数;对于表I/O等待(wait/io/table/sql/handler instruments的事件),该列值表示行数。如果值大于1,则表示该事件对应一个批量I/O操作。以下分别对单个表IO和批量表IO的区别进行描述:

  • MySQL的join查询使用嵌套循环实现。performance_schema instruments的作用是在join查询中提供对每个表的扫描行数和执行时间进行统计。示例:join查询语句:SELECT … FROM t1 JOIN t2 ON … JOIN t3 ON …,假设join顺序是t1,t2,t3
  • 在join查询中,一个表在查询时与其他表展开联结查询之后,该表的扫描行数可能增加也可能减少,例如:如果t3表扇出大于1,则大多数row fetch操作都是针对t3表,假如join查询从t1表访问10行记录,然后使用t1表驱动查询t2表,t1表的每一行都会扫描t2表的20行记录,然后使用t2表驱动查询t3表,t2表的每一行都会扫描t3表的30行记录,那么,在使用单行输出时,instruments统计操作的事件信息总行数为:10 +(10 * 20)+(10 * 20 * 30)= 6210
  • 通过对表中行扫描时的instruments统计操作进行聚合(即,每个t1和t2的扫描行数在instruments统计中可以算作一个批量组合),这样就可以减少instruments统计操作的数量。通过批量I/O输出方式,performance_schema每次对最内层表t3的扫描减少为一个事件统计信息而不是每一行扫描都生成一个事件信息,此时对于instruments统计操作的事件行数量减少到:10 +(10 * 20)+(10 * 20)= 410,这样在该join查询中对于performance_schema中的行统计操作就减少了93%,批量输出策略通过减少输出行数量来显着降低表I/O的performance_schema统计开销。但是相对于每行数据都单独执行统计操作,会损失对时间统计的准确度。在join查询中,批量I/O统计的时间包括用于连接缓冲、聚合和返回行到客户端的操作所花费的时间(即就是整个join语句的执行时间)

FLAGS:留作将来使用

PS:events_waits_current表允许使用TRUNCATE TABLE语句

events_waits_history 表

events_waits_history表包含每个线程最近的N个等待事件。 在server启动时,N的值会自动调整。 如果要显式设置这个N大小,可以在server启动之前调整系统参数performance_schema_events_waits_history_size的值。 等待事件需要执行结束时才被添加到events_waits_history表中(没有结束时保存在events_waits_current表)。当添加新事件到events_waits_history表时,如果该表已满,则会丢弃每个线程较旧的事件

events_waits_history与events_waits_current表定义相同

PS:允许执行TRUNCATE TABLE语句

events_waits_history_long 表

events_waits_history_long表包含最近的N个等待事件(所有线程的事件)。在server启动时,N的值会自动调整。 如果要显式设置这个N大小,可以在server启动之前调整系统参数

performance_schema_events_waits_history_long_size的值。等待事件需要执行结束时才会被添加到events_waits_history_long表中(没有结束时保存在events_waits_current表),当添加新事件到events_waits_history_long表时,如果该表已满,则会丢弃该表中较旧的事件。

events_waits_history_long与events_waits_current表结构相同

PS:允许使用TRUNCATE TABLE语句

阶段事件表

阶段事件记录表与等待事件记录表一样,也有三张表,这些表记录了当前与最近在MySQL实例中发生了哪些阶段事件,时间消耗是多少。阶段指的是语句执行过程中的步骤,例如:parsing 、opening tables、filesort操作等。

在以往我们查看语句执行的阶段状态,常常使用SHOW PROCESSLIST语句或查询INFORMATION_SCHEMA.PROCESSLIST表来获得,但processlist方式能够查询到的信息比较有限且转瞬即逝,我们常常需要结合profiling功能来进一步统计分析语句执行的各个阶段的开销等,现在,我们不需要这么麻烦,直接使用performance_schema的阶段事件就既可以查询到所有的语句执行阶段,也可以查询到各个阶段对应的开销,因为是记录在表中,所以更可以使用SQL语句对这些数据进行排序、统计等操作

要注意:阶段事件相关配置中,setup_instruments表中stage/开头的绝大多数instruments配置默认没有开启(少数stage/开头的instruments除外,如DDL语句执行过程的stage/innodb/alter*开头的instruments默认开启的),setup_consumers表中stages相关的consumers配置默认没有开启

events_stages_current 表

events_stages_current表包含当前阶段事件的监控信息,每个线程一行记录显示线程正在执行的stage事件的状态

在包含stage事件记录的表中,events_stages_current是基准表,包含stage事件记录的其他表(如:events_stages_history和events_stages_history_long表)的数据在逻辑上都来自events_stages_current表(汇总表除外)

表记录内容示例(以下仍然是一个执行select sleep(100);语句的线程,但这里是阶段事件信息)

root@localhost : performance _schema 12:24:40> select * from events_stages _current where EVENT_NAME='stage/sql/User sleep'G;

*************************** 1. row ***************************

THREAD_ID: 46

EVENT_ID: 280

END _EVENT_ID: NULL

EVENT_NAME: stage/sql/User sleep

SOURCE: item_func.cc:6056

TIMER_START: 14645080545642000

TIMER_END: 14698320697396000

TIMER_WAIT: 53240151754000

WORK_COMPLETED: NULL

WORK_ESTIMATED: NULL

NESTING _EVENT_ID: 266

NESTING _EVENT_TYPE: STATEMENT

1 row in set (0.00 sec)

以上的输出结果与语句的等待事件形式类似,这里不再赘述,events_stages_current表完整的字段含义如下

THREAD_ID,EVENT_ID:与事件关联的线程ID和当前事件ID,可以使用THREAD_ID和EVENT_ID列值来唯一标识该行,这两行的值作为组合条件时不会出现相同的数据行

本文由澳门威利斯人手机版发布于科学,转载请注明出处:中国手机贡献了力量,事件记录

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。