DRDS命令集合

一、帮助语句

SHOW HELP

SHOW HELP 语句,展示了DRDS 所有辅助SQL指令及其说明。


show_help.png

二、查看规则和节点拓扑类语句

SHOW RULE [FROM TABLE_NAME]
  1. show rule: 查看数据库下每一个逻辑表拆分情况。
  2. show rule from table_name: 查看数据库下指定逻辑表的拆分情况。

输出信息列详解:

  • TABLE_NAME::逻辑表的名称。
  • BROADCAST:是否为广播表(0否、1是)。
  • DB_PARTITION_KEY:分库的拆分键,没有分库的话,值为空。
  • DB_PARTITION_POLICY:分库的拆分策略,取值包括哈希或YYYYMM、YYYYDD、YYYYWEEK等日期策略。
  • DB_PARTITION_COUNT:分库数,默认是8。
  • TB_PARTITION_KEY:分表的拆分键,没有分表的话,值为空。
  • TB_PARTITION_POLICY:分表的拆分策略,取值包括哈希或MM、DD、MMDD、WEEK等日期策略。
  • TB_PARTITION_COUNT:分表数。
SHOW FULL RULE[FORM TABLE_NAME]

查看数据库下逻辑表的拆分规则,比SHOW FULE指令展示的信息更加详细

输出信息列详解:

  • TABLE_NAME:逻辑表的名称。
  • BROADCAST:是否为广播表(0否、1是)。
  • JOIN_GROUP:保留字段
  • ALLOW_FULL_TABLE_SCAN:分库分表在没有指定分表键值的情况下是否允许查询数据,如果配置为true,此时需要扫描每一个物理表来查找符合条件的数据,简称为全表扫描。
  • DB_NAME_PATTERN:{}之间的0为占位符,执行具体的SQL时会被 DB_RULES_STR 计算出的值替代,并保持位数。比如 DB_NAME_PATTERN 的值为 SEQ_{0000}_RDS,DB_RULES_STR 的值为[1,2,3,4],则会产生4个 DB_NAME,分别为 SEQ_0001_RDS、SEQ_0002_RDS、SEQ_0003_RDS、SEQ_0004_RDS。
  • DB_RULES_STR:具体的分库规则。
  • TB_NAME_PATTERN:TB_NAME_PATTERN 中 {} 之间的 0 为占位符,执行具体的 SQL 时会被 TB_RULES_STR计算出的值替代,并保持位数。比如,TB_NAME_PATTERN 的值为 table_{00},TB_RULES_STR 的值为[1,2,3,4,5,6,7,8],则会产生8张表,分别为table_01、table_02、table_03、table_04、table_05、table_06、table_07、table_08。
  • TB_RULES_STR:分表规则。
  • PARTITION_KEYS:分库和分表键集合,对于既分库又分表的情形,分库键在前,分表键在后。
  • DEFAULT_DB_INDEX:单库单表存放的分库。
SHOW TOPOLOGY FROM TABLE_NAME

查看指定逻辑表的拓扑分布,展示该逻辑表保存在哪些分库中,每个分库下包含哪些分表。

输出信息列详解:

  • GROUP_NAME:物理库的名称。
  • TABLE_NAME:物理表的名称。
SHOW PARTITIONS FROM TABLE_NAME

查看分库分表键集合,分库键和分表键之间用逗号分隔。如果最终结果有两个值,说明是既分库又分表的情形,第一个是分库键,第二个是分表键。如果结果只有一个值,说明是分库不分表的情形,该值是分库键。

SHOW BROADCASTS

查看广播表列表。

SHOW DATASOURCES

查看底层存储信息,包含数据库名、数据库分组名、连接信息、用户名、底层存储类型、读写权重、连接池信息等。

输出信息列详解:

  • SCHEMA:数据库名
  • GROUP:数据库分组名,分组的目标是管理多组数据完全相同的数据库,比如通过 RDS进行数据复制后的主备数据库。主要用来解决读写分离,主备切换的问题。
  • URL:底层 RDS的连接信息。
  • TYPE:底层存储类型,目前只支持 mysql
  • READ_WEIGHT:读权重,在主实例的读压力比较大的时候,可以通过 DRDS 读写分离功能将读流量进行分流,减轻 RDS 主实例的压力。DRDS 会自动识别读写流量,引导写流量进入 RDS 主实例,读流量则按配置的权重流向所有 RDS 实例。
  • WRITE_WEIGHT:写权重。
SHOW NODE

查看物理库的读写次数(历史累计数据)、读写权重(历史累计数据)。

输出信息列详解:

  • NAME:数据库名称。
  • MASTER_READ_COUNT:RDS 主实例处理的只读查询次数(历史累计数据)
  • SLAVE_READ_COUNT:RDS 备实例处理的只读查询次数(历史累计数据)
  • MASTER_READ_PERCENT:RDS 主实例处理的只读查询占比(注意该列显示的是累计的实际数据占比,并不是用户配置的百分比)
  • SLAVE_READ_PERCENT:RDS 备实例处理的只读查询占比(注意该列显示的是累计的实际数据占比,并不是用户配置的百分比)

注意:

事务中的只读查询会被发送到 RDS 主实例。

由于 MASTER_READ_PERCENT,SLAVE_READ_PERCENT 这两列代表的是历史累计数据,更改读写权重的配比后,这几个数值并不能立即反应最新的读写权重配比,需累计一段比较长的时间才行。

三、SQL 调优类语句

SHOW [FULL] SLOW [WHERE expr] [limit expr]

执行时间超过 1 秒的 SQL 语句是慢 SQL,逻辑慢 SQL 是指应用发送到 DRDS 的慢 SQL。

SHOW SLOW

查看自DRDS启动或者自上次执行CLEAR SLOW以来最慢的 100 条逻辑慢 SQL(注意,这里记录的是最慢的 100 个,缓存在 DRDS 系统中,当实例重启或者执行 CLEAR SLOW 时会丢失)。

SHOW FULL SLOW

查看自实例启动以来记录的所有逻辑慢 SQL(持久化到 DRDS 的内置数据库中)。该记录数有一个上限(具体数值跟购买的实例规格相关),DRDS 会滚动删除比较老的慢 SQL 语句。实例的规格如果是4C4G 的话,最多记录 10000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL两种);实例的规格如果是 8C8G的话,最多记录 20000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL),其它规格依此类推。

输出信息列详解:

  • HOST:来源 IP
  • START_TIME:执行开始时间
  • EXECUTE_TIME:执行时间
  • AFFECT_ROW:对于 DML 语句是影响行数;对于查询语句是返回的记录数
show slow where execute_time > 1000

3.1 排查 DRDS 慢 SQL

在 DRDS 中,一条 SQL 语句会在 DRDS 和 RDS 节点上逐步执行。任意节点上的执行损耗过大都会导致慢SQL。

慢 SQL 的一般排查步骤为:

定位慢 SQL

定位性能损耗节点

定位性能损耗原因并处理

3.2 定位慢 SQL

定位慢 SQL 一般有两种场景:历史信息可从慢 SQL 记录中查询;实时慢 SQL 执行信息可使用 SHOW PROCESSLIST 指令展示。

查看慢 SQL 记录

执行以下指令查询慢 SQL Top 10。此查询针对 DRDS 层面的逻辑 SQL 。一个逻辑 SQL 对应一个或者多个RDS 库表的 SQL 执行。

SHOW SLOW limit 10

查看当前实时 SQL 执行信息

如果当前服务器中正在执行的 SQL 比较慢,可以使用 SHOW PROCESSLIST 指令来查看当前 DRDS 数据库中实时的执行信息。其中 TIME 列代表的是该 SQL 已经执行的时间。

SHOW PROCESSLIST WHERE COMMAND != 'Sleep'

输出信息列详解:

  • ID:连接标识。
  • USER:执行该 SQL 的分库用户名。
  • DB:指定的数据库,如果没有指定则为 NULL。
  • COMMAND:正在执行的命令类型。SLEEP 代表空闲连接。
  • TIME:SQL 已执行的时间,单位是秒。
  • STATE:当前的执行状态。
  • INFO:正在执行的 SQL 语句,有可能因为过长而无法完全显示,此时可以结合业务参数等信息把完整 SQL推导出来。

3.3 定位性能损耗节点

从慢 SQL 记录或者实时 SQL 执行信息中定位到慢 SQL 后,可以执行 TRACE 指令跟踪该 SQL 在 DRDS 和RDS 上的运行时间,以便定位瓶颈。TRACE 命令会实际执行 SQL,在执行过程中记录所有节点消耗的时间,并返回执行结果。

TRACE SELECT SQL_STATEMENT

TRACE 指令执行完毕后,可以执行 SHOW TRACE 命令查看结果,根据每个组件的时间消耗来判断慢 SQL 的瓶颈。

SHOW TRACE

SHOW TRACE 返回的结果中,根据 TIME_COST (单位毫秒)列可以判断哪个节点上的执行时间消耗大。同时可以看到对应的 GROUP_NAME (即 DRDS/RDS 节点),以及 STATEMENT 列信息(即正在执行的 SQL)。通过GROUP_NAME 是否等于 DRDS 可以判断该慢节点存在于 DRDS 还是 RDS。

3.4 定位性能损耗原因并处理

DRDS 慢节点处理

当慢 GROUP_NAME 是 DRDS 时,请检查执行过程中是否存在 Merge Sorted、Temp Table Merge、Aggregate等计算耗时操作。
RDS 慢节点处理

当慢节点在 RDS 时,请检查该 SQL 语句在 RDS 上的执行计划。

在 DRDS 中,可以使用 /!TDDL:node={GROUP_NAME}*/ EXPLAIN 来查看某个 RDS 的执行计划。执行计划展示了 RDS 执行该 SQL 的过程信息,包括表间关联及索引信息等。

详细过程如下:

依据 GROUP_NAME 组装 HINT:/!TDDL:node=’TEST_123__TEST_123__RDS’*/

将组装好的 HINT 及带 EXPLAIN 前缀的 STATEMENT 拼装成新的 SQL 并执行。EXPLAIN 指令不会真正执行,而只是显示该 SQL 的执行计划信息。

SHOW [FULL] PHYSICAL_SLOW [WHERE expr] [limit expr]

执行时间超过1秒的 SQL 语句是慢 SQL,物理慢 SQL 是指 DRDS 发送到 RDS 的慢 SQL

SHOW PHYSICAL_SLOW

查看自 DRDS 启动或者上次执行CLEAR SLOW以来最慢的 100 条物理慢 SQL(注意,这里记录的是最慢的100 个,缓存在 DRDS 系统中,当实例重启或者执行 CLEAR SLOW 时会丢失)

SHOW FULL PHYSICAL_SLOW

查看实例启动以来记录的所有物理慢 SQL(持久化到 DRDS 的内置数据库中)。该记录数有一个上限(具体数值跟购买的实例规格相关),DRDS 会滚动删除比较老的慢 SQL 语句。实例的规格如果是 4C4G 的话,最多记录 10000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL);实例的规格如果是 8C8G 的话,最多记录20000 条慢 SQL 语句(包括逻辑慢 SQL 和 物理慢 SQL),其它规格依此类推

输出信息列详解:

  • GROUP_NAME:数据库分组。
  • START_TIME:执行开始时间。
  • EXECUTE_TIME:执行时间。
  • AFFECT_ROW:对于 DML 语句是影响行数;对于查询语句是返回的记录数。
CLEAR SLOW

清空自 DRDS 启动或者上次执行CLEAR SLOW以来最慢的 100 条逻辑慢 SQL 和 最慢的 100 条物理慢 SQL。注意:SHOW SLOW 和 SHOW PHYSICAL_SLOW展示的是最慢的100个 SQL,如果长时间未执行CLEAR SLOW,可能都是非常老的 SQL 了,一般执行过 SQL 优化之后,建议都执行下CLEAR SLOW,等待系统运行一段时间,再查看下慢 SQL 的优化效果。

EXPLAIN DETAIL SQL

查看指定 SQL 在 DRDS 层面的执行计划,注意这条 SQL 不会实际执行。

EXPLAIN EXECUTE SQL

查看底层存储的执行计划,等同于 MYSQL 的 EXPLAIN 语句。

TRACE SQL 和 SHOW TRACE

查看具体 SQL 的执行情况。TRACE [SQL] 和 SHOW TRACE 要结合使用。注意 TRACE SQL 和 EXPLAIN SQL 的区别在于 TRACE SQL 会实际执行该语句。

CHECK TABLE table_name

对数据表进行检查。主要用于 DDL 建表失败的情形。

对于拆分表,检查底层物理分表是否有缺失的情况,底层的物理分表的列和索引是否是一致。

对于单库单表,检查表是否存在。

SHOW TABLE STATUS LIKE ‘pattern’

获取表的信息,该指令聚合了底层各个物理分表的数据。

重要列详解:

  • NAME:表名称。
  • ENGINE:表的存储引擎。
  • VERSION:表的存储引擎的版本。
  • ROW_FORMAT:行格式,主要是 Dynamic、Fixed、Compressed 这三种格式。动态(Dynamic)行的行长度可变,例如 VARCHAR 或 BLOB 类型字段;固定(Fixed)行是指行长度不变,例如 CHAR 和 INTEGER 类型字段。
  • ROWS:表中的行数。
  • AVG_ROW_LENGTH:平均每行包括的字节数。
  • DATA_LENGTH:整个表的数据量(单位:字节)。
  • MAX_DATA_LENGTH:表可以容纳的最大数据量。
  • INDEX_LENGTH:索引占用磁盘的空间大小。
  • CREATE_TIME:表的创建时间。
  • UPDATE_TIME:表的最近更新时间。
  • COLLATION:表的默认字符集和字符排序规则。
  • CREATE_OPTIONS:指表创建时的其他所有选项。

四、统计信息查询类语句

SHOW [FULL] STATS

查看整体的统计信息,这些信息都是瞬时值。注意不同版本的 DRDS SHOW FULL STATS的结果是有区别的。

重要列说明:

  • QPS:逻辑 QPS。
  • RDS_QPS:物理 QPS。
  • ERROR_PER_SECOND:每秒的错误数,包含语法错误,主键冲突等等所有异常。
  • VIOLATION_PER_SECOND:每秒的主键或者唯一键冲突。
  • MERGE_QUERY_PER_SECCOND:通过分库分表,从多表中进行的查询。
  • ACTIVE_CONNECTIONS:正在使用的连接。
  • CONNECTION_CREATE_PER_SECCOND:每秒创建的连接数。
  • RT(MS):逻辑 RT(响应时间)。
  • RDS_RT(MS):物理 RT。
  • NET_IN(KB/S):DRDS 收到的网络流量。
  • NET_OUT(KB/S):DRDS 输出的网络流量。
  • THREAD_RUNNING:正在运行的线程数。
  • HINT_USED_PER_SECOND:每秒带 HINT 的查询的数量。
  • HINT_USED_COUNT:启动到现在带 HINT 的查询总量。
  • AGGREGATE_QUERY_PER_SECCOND:每秒聚合查询的频次。
  • AGGREGATE_QUERY_COUNT:聚合查询总数(历史累计数据)。
  • TEMP_TABLE_CREATE_PER_SECCOND:每秒创建的临时表的数量。
  • TEMP_TABLE_CREATE_COUNT:启动到现在创建的临时表总数量。
  • MULTI_DB_JOIN_PER_SECCOND:每秒跨库 JOIN 的数量。
  • MULTI_DB_JOIN_COUNT:启动到现在跨库 JOIN 的总量。
SHOW DB STATUS

用于查看物理库容量/性能信息,所有返回值为实时信息。容量信息通过 MySQL 系统表获得,与真实容量情况可能有差异。

重要列说明:

  • NAME: 代表一个 DRDS DB,此处显示的是 DRDS 内部标记,与 DRDS DB 名称不同。
  • CONNECTION_STRING: 分库的连接信息。
  • PHYSICAL_DB: 分库名称,TOTAL 行代表一个数据库实例下所有 DRDS 分库容量的总和。
  • SIZE_IN_MB: 分库中数据占用的空间,单位为 MB。
  • RATIO: 单个分库数据量在实例上所有分库总数据量中的占比。
  • THREAD_RUNNING: 物理数据库实例当前正在执行的线程情况,各个参数含义与 MySQL SHOW GLOBAL STATUS 指令返回值的含义相同。

五、SHOW PROCESSLIST 指令与 KILL 指令

SHOW PROCESSLIST

DRDS 中,可以使用 SHOW PROCESSLIST 指令查看 DRDS 中的连接与正在执行的 SQL 等信息。

重要列说明:

  • ID:连接的 ID,为一个 Long 型数字。
  • USER:建立此连接所使用的用户名。
  • HOST:建立此连接的机器的 IP 与端口。
  • DB:此连接所访问的库名。
  • COMMAND,目前有两种取值:Query,代表当前连接正在执行 SQL 语句。Sleep,代表当前连接正处于空闲状态。TIME, 连接处于当前状态持续的时间:当 COMMAND 为 Query 时,代表当此连接上正在执行的 SQL 已经执行的时间。当 COMMAND 为 Sleep 时,代表当此连接空闲的时间。STATE:目前无意义,恒为空值。
  • INFO:当 COMMAND 为 Query 时,为此连接上正在执行的 SQL 的内容。当不带 FULL 参数时,最多返回正在执行的 SQL 的前 30 个字符。当带 FULL 参数时,最多返回正在执行的 SQL 的前1000个字符。当 COMMAND 为其他值时,无意义,为空值。
SHOW PHYSICAL_PROCESSLIST

DRDS 中,可以使用 SHOW PHYSICAL_PROCESSLIST 指令查看底层所有 MySQL/RDS 上正在执行的 SQL 信息。

语法:
SHOW [FULL] PHYSICAL_PROCESSLIST

当 SQL 比较长的时候,SHOW PHYSICAL_PROCESSLIST 会截断,这时可以使用 SHOW FULL PHYSICAL_PROCESSLIST 获取完整 SQL。
返回结果中每一列的含义与 MySQL 的 SHOW PROCESSLIST 指令等价。

KILL

KILL 指令用于终止一个正在执行的 SQL。
DRDS 使用 DRDS 在 MySQL/RDS 上创建的用户名连接 MySQL/RDS,所以一般直接连接MySQL/RDS 是没有权限对 DRDS 发起的请求进行 KILL 操作的。
如果需要终止一个 DRDS 上正在执行的 SQL,需要使用 MySQL 命令行、DMS 等工具连接 DRDS,在 DRDS上执行 KILL 指令

语法:

KILL PROCESS_ID | 'PHYSICAL_PROCESS_ID' | 'ALL'

有三种用法:

终止一个特定的逻辑 SQL: KILL PROCESS_ID。
PROCESS_ID 为 SHOW [FULL] PROCESSLIST 指令返回的 ID 列。
DRDS 中,KILL PROCESS_ID 指令会将此连接正在执行的逻辑 SQL 与物理 SQL 均终止掉,并断开此连接。
DRDS 不支持 KILL QUERY 指令。
终止一个特定的物理 SQL: KILL 'PHYSICAL_PROCESS_ID'。
其中的 PHYSICAL_PROCESS_ID 来自SHOW PHYSICAL_PROCESS_ID指令返回的 ID 列。

注意:由于 PHYSICAL_PROCESS_ID 列为一个字符串,并非一个数字,因此 KILL 指令中,PHYSICAL_PROCESS_ID 需要使用单引号括起来。

终止当前库上所有通过 DRDS 执行的物理SQL: KILL 'ALL'。
当底层 MySQL/RDS 因为一些 SQL 导致压力非常大的时候,可以使用 KILL 'ALL' 指令终止当前 DRDS 库上所有正在执行的物理 SQL。
符合以下条件的物理 PROCESS 会被KILL 'ALL'指令终止:

该 PROCESS 的 User 是 DRDS 在 MySQL/RDS 上所创建的用户名。
该 PROCESS 正在执行查询,也即 COMMAND 为 Query。

六、DRDS 慢SQL明细

DRDS 将执行时间超过1秒的 SQL 定义为慢 SQL。DRDS 中的慢 SQL 分为两种:逻辑慢 SQL 和 物理慢SQL。

逻辑慢 SQL:应用发送到 DRDS 的 慢SQL。

物理慢 SQL:DRDS 发送到 RDS 的 慢SQL。

实例规格为 2C2G 的实例会记录 5000 条慢 SQL 明细,实例规格为 4C4G 的实例,会记录 10000 条慢 SQL明细。DRDS 会滚动删除超过限制数量的慢 SQL 明细。

语法:

SHOW FULL {SLOW | PHYSICAL_SLOW} [WHERE where_condition]
[ORDER BY col_name [ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

解释

SHOW FULL SLOW显示的是逻辑慢 SQL,即应用发送到 DRDS 的 SQL。

其中SHOW FULL SLOW的结果集会包含以下列,其含义如下:

TRACE_ID: 该 SQL 的唯一标记,同一个逻辑 SQL 以及该逻辑 SQL 产生的物理 SQL 的 TRACE_ID 相同,同时TRACE_ID 也会以注释的形式发送到 RDS,在 RDS 的 SQL 明细中可以根据 TRACE_ID 找到该 SQL。

HOST: 发送该 SQL 的客户端的 IP,注意:在 VPC 模式下可能无法获取客户端 IP。

START_TIME: DRDS 收到这个 SQL 的时间。

EXECUTE_TIME: DRDS 执行该 SQL 消耗的时间。

AFFECT_ROW: 该 SQL 返回的记录数或者影响的行数。

SQL: 执行的语句。

SHOW FULL PHYSICAL_SLOW指的是物理慢 SQL,即 DRDS 发送到 RDS(MySQL) 的 SQL。

SHOW FULL PHYSICAL_SLOW 的结果集会包含以下列,其含义如下:

TRACE_ID: 该 SQL 的唯一标记,同一个逻辑 SQL 以及该逻辑 SQL 产生的物理 SQL 的 TRACE_ID 相同,同时 TRACE_ID 也会以注释的形式发送到 RDS,在 RDS 的 SQL 明细中可以根据 TRACE_ID 找到该 SQL。

GROUP_NAME: 数据库分组名,分组的目标是管理多组数据完全相同的数据库,比如通过 RDS(MySQL)进行数据复制后的主备数据库,主要用来解决读写分离,主备切换的问题。

DBKEY_NAME: 执行的分库信息。

START_TIME: DRDS 开始执行这个 SQL 的时间。

EXECUTE_TIME: DRDS 执行该 SQL 消耗的时间。

SQL_EXECUTE_TIME: DRDS 调用 RDS 执行该 SQL 消耗的时间。

GETLOCK_CONNECTION_TIME: DRDS 从连接池获取连接消耗的时间,该值如果很大,说明 RDS 的连接已被耗尽,一般是慢 SQL 比较多引起,登录到相应的 RDS,结合SHOW PROCESSLIST指令来排查。

CREATE_CONNECTION_TIME: DRDS 建立 RDS 连接消耗的时间,该值如果很大,很大原因是底层的 RDS 压力比较大或者挂掉了。

AFFECT_ROW: 该 SQL 返回的记录数或者影响的行数。

SQL: 执行的语句。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容