精华内容
下载资源
问答
  • 这个SQL可以查看在某段时间内DB中 耗时最长的语句及执行次数等信息。 把下面的语句复制到生产库中执行, 结果可以帮助我们分析系统最频繁使用的页面有哪些,哪些SQL语句有必要进行优化。 对系统的使用情况及性能...

     

    刚刚看到一条SQL分享给大家。

    这个SQL可以查看在某段时间内DB中 耗时最长的语句及执行次数等信息。

    把下面的语句复制到生产库中执行,

    结果可以帮助我们分析系统最频繁使用的页面有哪些,哪些SQL语句有必要进行优化。

    对系统的使用情况及性能调优有一定的帮助。

     

    Thanks,

    Aden

     

     

     

    declare @sKssj varchar(23),

    @sJssj varchar(23)

    set @sKssj='2013-02-01 01:35:00.000'

    set @sJssj='2013-02-01 23:00:00.000'

     

    SELECT

    (total_elapsed_time / execution_count)/1000 N'平均时间ms'

    ,total_elapsed_time/1000 N'总花费时间ms'

    ,total_worker_time/1000 N'所用的CPU总时间ms'

    ,total_physical_reads N'物理读取总次数'

    ,total_logical_reads/execution_count N'每次逻辑读次数'

    ,total_logical_reads N'逻辑读取总次数'

    ,total_logical_writes N'逻辑写入总次数'

    ,execution_count N'执行次数'

    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

    ((CASE statement_end_offset

    WHEN -1 THEN DATALENGTH(st.text)

    ELSE qs.statement_end_offset END

    - qs.statement_start_offset)/2) + 1) N'执行语句'

    ,creation_time N'语句编译时间'

    ,last_execution_time N'上次执行时间'

    FROM

    sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as st

    WHERE

    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,

    ((CASE statement_end_offset

    WHEN -1 THEN DATALENGTH(st.text)

    ELSE qs.statement_end_offset END

    - qs.statement_start_offset)/2) + 1) not like '%fetch%'

    and creation_time between @sKssj and @sJssj

    ORDER BY

    total_elapsed_time / execution_count DESC;

    转载于:https://www.cnblogs.com/super-cj/archive/2013/02/27/2934538.html

    展开全文
  • 复制过程复制的过程步骤如下:从节点执行 slaveof 命令从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点连接建立成功后,...

    原文章地址 https://zhuanlan.zhihu.com/p/60239657

    目录:

    1. 复制过程
    2. 数据间的同步
    3. 全量复制
    4. 部分复制
    5. 心跳
    6. 异步复制

    复制原理

    1. 复制过程

    复制的过程步骤如下:

    1. 从节点执行 slaveof 命令
    2. 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制
    3. 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点
    4. 连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连
    5. 如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。
    6. 权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。
    7. 当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性

    2. 数据间的同步

    上面说的复制过程,其中有一个步骤是“同步数据集”,这个就是现在讲的‘数据间的同步’。

    redis 同步有 2 个命令:sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 为了优化 sync 新设计的命令。我们会重点关注 2.8 的 psync 命令。

    psync 命令需要 3 个组件支持:
    1.主从节点各自复制偏移量
    2.主节点复制积压缓冲区
    3.主节点运行 ID

    主从节点各自复制偏移量

    参与复制的主从节点都会维护自身的复制偏移量。
    

    主节点在处理完写入命令后,会把命令的字节长度做累加记录,统计信息在 info replication
    中的 master_repl_offset 指标中。

    从节点每秒钟上报自身的的复制偏移量给主节点,因此主节点也会保存从节点的复制偏移量。

    从节点在接收到主节点发送的命令后,也会累加自身的偏移量,统计信息在 info replication 中。

    通过对比主从节点的复制偏移量,可以判断主从节点数据是否一致。

    主节点复制积压缓冲区

    复制积压缓冲区是一个保存在主节点的一个固定长度的先进先出的队列。默认大小 1MB。
    

    这个队列在 slave 连接是创建。这时主节点响应写命令时,不但会把命令发送给从节点,也会写入复制缓冲区。

    他的作用就是用于部分复制和复制命令丢失的数据补救。

    通过 info replication 可以看到相关信息。

    主节点运行 ID

    每个 redis 启动的时候,都会生成一个 40 位的运行 ID。
    

    运行 ID 的主要作用是用来识别 Redis 节点。如果使用 ip+port 的方式,那么如果主节点重启修改
    了 RDB/AOF 数据,从节点再基于偏移量进行复制将是不安全的。所以,当运行 id 变化后,从节点将
    进行全量复制。也就是说,redis 重启后,默认从节点会进行全量复制。

    如果在重启时不改变运行 ID 呢?
    可以通过 debug reload 命令重新加载 RDB 并保持运行 ID 不变。从而有效的避免不必要的全量复制。
    他的缺点则是:debug reload 命令会阻塞当前 Redis 节点主线程,因此对于大数据量的主节点或者
    无法容忍阻塞的节点,需要谨慎使用。

    一般通过故障转移机制可以解决这个问题。

    psync 命令的使用方式

    命令格式为 psync {runId} {offset}
    

    runId : 从节点所复制主节点的运行 id
    offset:当前从节点已复制的数据偏移量

    psync 执行流程:

    流程说明:从节点发送 psync 命令给主节点,runId 就是目标主节点的 ID,如果没有默认为 -1,offset 是从节点保存的复制偏移量,如果是第一次复制则为 -1.

    主节点会根据 runid 和 offset 决定返回结果:

    • 如果回复 +FULLRESYNC {runId} {offset} ,那么从节点将触发全量复制流程。
    • 如果回复 +CONTINUE,从节点将触发部分复制。
    • 如果回复 +ERR,说明主节点不支持 2.8 的 psync 命令,将使用 sync 执行全量复制。

    到这里,数据之间的同步就讲的差不多了,篇幅还是比较长的。主要是针对 psync 命令相关之间的介绍。

    3. 全量复制

    全量复制是 Redis 最早支持的复制方式,也是主从第一次建立复制时必须经历的的阶段。触发全量复制的命令是 sync 和 psync。之前说过,这两个命令的分水岭版本是 2.8,redis 2.8 之前使用 sync 只能执行全量不同,2.8 之后同时支持全量同步和部分同步。

    流程如下:

    介绍一下上图步骤:

    1. 发送 psync 命令(spync ? -1)
    2. 主节点根据命令返回 FULLRESYNC
    3. 从节点记录主节点 ID 和 offset
    4. 主节点 bgsave 并保存 RDB 到本地
    5. 主节点发送 RBD 文件到从节点
    6. 从节点收到 RDB 文件并加载到内存中
    7. 主节点在从节点接受数据的期间,将新数据保存到“复制客户端缓冲区”,当从节点加载 RDB 完毕,再发送过去。(如果从节点花费时间过长,将导致缓冲区溢出,最后全量同步失败)
    8. 从节点清空数据后加载 RDB 文件,如果 RDB 文件很大,这一步操作仍然耗时,如果此时客户端访问,将导致数据不一致,可以使用配置slave-server-stale-data 关闭.
    9. 从节点成功加载完 RBD 后,如果开启了 AOF,会立刻做 bgrewriteaof

    以上加粗的部分是整个全量同步耗时的地方。

    注意:

    1. 如过 RDB 文件大于 6GB,并且是千兆网卡,Redis 的默认超时机制(60 秒),会导致全量复制失败。可以通过调大 repl-timeout 参数来解决此问题
    2. Redis 虽然支持无盘复制,即直接通过网络发送给从节点,但功能不是很完善,生产环境慎用。

    4. 部分复制

    当从节点正在复制主节点时,如果出现网络闪断和其他异常,从节点会让主节点补发丢失的命令数据,主节点只需要将复制缓冲区的数据发送到从节点就能够保证数据的一致性,相比较全量复制,成本小很多。

    步骤如下:

    1. 当从节点出现网络中断,超过了 repl-timeout 时间,主节点就会中断复制连接。
    2. 主节点会将请求的数据写入到“复制积压缓冲区”,默认 1MB。
    3. 当从节点恢复,重新连接上主节点,从节点会将 offset 和主节点 id 发送到主节点
    4. 主节点校验后,如果偏移量的数后的数据在缓冲区中,就发送 cuntinue 响应 —— 表示可以进行部分复制
    5. 主节点将缓冲区的数据发送到从节点,保证主从复制进行正常状态。

    5. 心跳

    主从节点在建立复制后,他们之间维护着长连接并彼此发送心跳命令。

    心跳的关键机制如下:

    1. 中从都有心跳检测机制,各自模拟成对方的客户端进行通信,通过 client list 命令查看复制相关客户端信息,主节点的连接状态为 flags = M,从节点的连接状态是 flags = S。
    2. 主节点默认每隔 10 秒对从节点发送 ping 命令,可修改配置 repl-ping-slave-period 控制发送频率。
    3. 从节点在主线程每隔一秒发送 replconf ack{offset} 命令,给主节点上报自身当前的复制偏移量。
    4. 主节点收到 replconf 信息后,判断从节点超时时间,如果超过 repl-timeout 60 秒,则判断节点下线。

    注意:为了降低主从延迟,一般把 redis 主从节点部署在相同的机房/同城机房,避免网络延迟带来的网络分区造成的心跳中断等情况。

    6. 异步复制

    主节点不但负责数据读写,还负责把写命令同步给从节点,写命令的发送过程是异步完成,也就是说主节点处理完写命令后立即返回客户度,并不等待从节点复制完成。

    异步复制的步骤很简单,如下:

    1. 主节点接受处理命令
    2. 主节点处理完后返回响应结果
    3. 对于修改命令,异步发送给从节点,从节点在主线程中执行复制的命令。

    总结

    本文主要分析了 Redis 的复制原理,包括复制过程,数据之间的同步,全量复制的流程,部分复制的流程,心跳设计,异步复制流程。

    其中,可以看出,RDB 数据之间的同步非常耗时。所以,Redis 在 2.8 版本退出了类似增量复制的 psync 命令,当 Redis 主从直接发生了网络中断,不会进行全量复制,而是将数据放到缓冲区(默认 1MB)里,在通过主从之间各自维护复制 offset 来判断缓存区的数据是否溢出,如果没有溢出,只需要发送缓冲区数据即可,成本很小,反之,则要进行全量复制,因此,控制缓冲区大小非常的重要。

    展开全文
  • 显示您的总捐款,当前连胜, 和您的GitHub个人资料README上最长的条纹 目录 快速设置 将下面的markdown复制并粘贴到您的GitHub个人资料中README 用您的GitHub用户名替换?user=之后的值 [![GitHub Streak]...
  • Redis主从复制流程

    2020-06-10 23:32:59
    2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制 3、从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 4、连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则...

    Redis主从复制流程

    复制过程

    1、从节点执行 slaveof 命令

    2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制

    3、从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点

    4、连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连

    5、如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。

    6、权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。

    7、当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。

    ​ 当配置好slave后,slave与master建立连接,然后发送sync命令。无论是第一次连接还是重新连接,master都会启动一个后台进程,将 数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台进程完成写文件后,master就发送文件给slave,slave将 文件保存到硬盘上,再加载到内存中,接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave。

    ​ 如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像,然后发送给所有的slave。master同步数据时是非阻塞式的,可以接收用户的读写请求。然而在slave端是阻塞模式的,slave在同步master数据时,并不能够响应客户端的查询。

    ​ 可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化

    展开全文
  • 一道常见前端面试题 原理是动态规划 找了一篇博客来讲解这个部分,不过用Java实现 .../////////////////////复制他人博客部分///////////////////////// 利用矩阵来保存子串... 最长公共子串区别: 找两个字符...

    一道常见的前端面试题

    原理是动态规划

    找了一篇博客来讲解这个部分,不过用Java实现的

    原址在: https://my.oschina.net/leejun2005/blog/117167

    /复制他人博客部分/

    利用矩阵来保存子串数量信息

    1、先科普下最长公共子序列 & 最长公共子串的区别:

    找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。而最长公共子序列则并不要求连续。

    2、最长公共子串

    其实这是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"ba"或"ab")

    b  a  b

    c  0  0  0

    a  0  1  0

    b  1  0  1

    a  0  1  0

    我们看矩阵的斜对角线最长的那个就能找出最长公共子串

    不过在二维矩阵上找最长的由1组成的斜对角线也是件麻烦费时的事,下面改进:当要在矩阵是填1时让它等于其左上角元素加1。

       b  a  b

    c  0  0  0

    a  0  1  0

    b  1  0  2

    a  0  2  0

    这样矩阵中的最大元素就是 最长公共子串的长度。

    在构造这个二维矩阵的过程中由于得出矩阵的某一行后其上一行就没用了,所以实际上在程序中可以用一维数组来代替这个矩阵。

    function csm (str1, str2) {
    	let l1 = str1.length;
    	let l2 = str2.length;
    	let strArr1 = str1.split('');
    	let strArr2 = str2.split('');
    	let ma = [];
    	let max = 0;
    	for (let i = 0; i < l1; i++) {
    		let sa = [];
    		for (let j = 0; j < l2; j++) {
    			sa[j] = 0;
    		}
    		ma.push(sa);
    	}
    
    	for (let m = 0; m < l1; m++) {
    		for (let n = 0; n < l2; n++) {
    		    if (strArr1[m] === strArr2[n]) {
    		        //处理边界
    				if (m == 0 || n == 0) {
    					ma[m][n] = 1;
    				} else {
    					ma[m][n] = ma[m - 1][n - 1] + 1;
    				}
    				max = Math.max(max, ma[m][n]);
    			}
    		}
    	}
    	return max;
    }
    复制代码
    展开全文
  • 文件的信息:文件权限、文件主、文件大小、存放位置、建立日期等。 文件使用的一个标识符,同一个文件有相同的inode号。 2)数据:文件的实际内容。 Eg: 查看文件的i节结号:ls -i 3.文件名 1)文件名最长可多达255个...
  • 2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制 3、从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 4、连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则...
  • 1 数据同步: 只有租约信息是实时同步 ...3 无论在群集端两端节点哪段执行作用域手动复制都会同步掉另一端作用域信息(包括租约保留或作用域选项信息)。 4 通过powershell 建立PSSession远...
  • 概述 AutoCompleteSearchBar是UISeachBar子类,它支持自动完成功能,包括: ... 您也可以打开紧凑模式,紧凑模式是一种将结果视图区域最小化到几乎与最长结果一样长模式,并遵循searchBar文本在水平方向
  • 在很多场合为了显示出信息的及时性,一般会将时间显示成“刚刚”,“5分钟前”,“3小时前”等,而不是直接将时间打印出来。比如微博,SNS类应用就最长用到这个功能。而一般存储在数据库中时间格式为 Unix时间戳,...
  • 有关所有区域的信息, 请参阅 Oracle8i National Language Support Guide。 值范围: 任何有效的地区名。 默认值: 根据操作系统而定 nls_timestamp_format: 说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 ...
  • 很强ccna教程

    2013-12-02 15:02:54
    路由器 A 根据错误的信息升级它的路由表 无限计数 10.4.0.0 网络的数据将在路由器 A, B, 和 C 之间循环 10.4.0.0 网络的跳数将无限大 6、解决环路的方法 定义最大跳数 指定最大跳数来防止路由回环 水平分割 不会...
  • 打开指定包名App应用信息界面 openAppInfo 可用来做App信息分享 shareAppInfo 判断当前App处于前台还是后台 isAppBackground 常量相关→ConstUtils.java 存储相关常量 时间相关常量 正则相关常量 转换相关→...
  • 围棋控件

    2008-02-23 00:31:59
    注意,当你处理鼠标事件时,整个棋谱已经完成更新和显示等一切工作或因为错误或限制没有对棋谱进行处理,  你可以对比单击鼠标前的Record_Finger属性得到棋谱是否改变(也就是是否成果走棋的信息!)  对比...
  • 第二步:0x0241D0:Unicode码C:\Temp 改为自设目录,最长24个字符 20061205新性: * 更正有查询码时(如五笔czol)空码时,锁定键盘BUG * 取消强制中文标点,即:CTRL+SPACE 关闭再打开输入法保持原状态 +...
  • 第二步:0x0241D0:Unicode码C:\Temp 改为自设目录,最长24个字符 20061205新性: * 更正有查询码时(如五笔czol)空码时,锁定键盘BUG * 取消强制中文标点,即:CTRL+SPACE 关闭再打开输入法保持原状态 + ...
  • 线程分析

    2019-07-22 16:24:48
    使用top -Hp显示进程所有线程信息查找CPU耗时最长线程PID top -Hp 15834 复制代码使用printf处理线程16进制形式 [root@VM_101_10_centos output]# printf "%x\n" 15852 3dec 复制代码使用jstack查找耗时进程是...
  • 远程登录软件s-term

    2013-01-14 16:09:58
    在使用bbs时候,通常需要复制一些信息,一般telnet软件只能实现选择屏幕上一段内容进行复制,s-term选择屏幕上区域时候除了正常选择外,还可以选择一个矩形区域进行复制粘贴。按下工具栏上切换选择...
  • //要发送给客户的信息 struct sockaddr_in ser, cli;//服务器和客户的地址 if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to load Winsock.\n"); return -1; } sListen = ...
  • UrlShorter是一个简单快捷URL网址缩短系统。它可以把长长URL地址转化成很短地址,基于php mysql开发,速度快,对服务器压力很小,支持apache和nginx,采用 ...记住CTRL C可以快捷复制文本框里生成好地址。
  • 文件管理相关基础

    2020-06-21 17:16:12
    5.复制/etc/profile至/tmp目录,用替换命令删除/tmp/profile文件中行首空白字符?6.如何在vim中设置tab缩进为4个字符? 1.描述Linux发行版系统目录名称命名规则以及用途? 命名规则 1、文件名最长字节数255个
  • Java-2013android最新面试题

    千次阅读 2013-06-16 17:42:20
    1、请解释下Android程序运行时权限与文件...2、一条最长的信息约占多少byte? 中文70(包括标点)英文160160个字节。 3、如何将SQLite数据库(dictionary.db文件)与apk文件一起发布 可以将dictionary.db文件复制到E
  • CPP班级课程12-源码

    2021-02-12 23:08:33
    输入3个字符串,输出将显示最长的字符串和最短的字符串。 输入编号,价格和数量。 通过输入员工编号来删除员工信息。 输入任何数字,输出将是该数字之前的所有素数。 使用循环概念,程序将给出数字输出,形成...
  • 默讣情况搭建CA服务器时最长...下面将实际应用中操作经验分享给大家,具体操作如下:1、在运行中敲入notepad命,复制如下信息到记事本中:[Version]Signature= "$Windows NT$"[Certsrv_Server]RenewalKeyLength=40...
  • 100天云-源码

    2021-02-24 09:30:05
    在您看到此图标地方填写您详细信息 :writing_hand: 我们提供了一个示例“一日旅程”条目,其起始位置为0。您可以删除此示例。 萨鲁阿云之旅 我目前是1/2级服务台代理,已经过去三年半了。 去年,我通过了...
  • UrlShorter v0.0.1.rar

    2019-07-07 07:34:01
    记住CTRL C可以快捷复制文本框里生成好地址。 admin.php文件可以改名,如果之前访问地址是:http://www.domain.com/admin.php 我们把admin.php改成23ddsak3ssa.php 改过之后地址就成了:...
  • 复制文档操作代码 // 创建好友工作群 let promise = tim.createGroup({ type: TIM.TYPES.GRP_MEETING,//群组类型 name: 'WebSDK',//必填,群组名称,最长30字节 groupID: this.roomId...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

最长的信息复制