图片 5

性能调优,验证整型函数分享

一.概述 

  与网络I/O相关的等待的主要是ASYNC_NETWORK_IO,是指当sql
server返回数据结果集给客户端的时候,会先将结果集填充到输出缓存里(ouput
cache),同时网络层会开始将输出缓存里的数据打包,由客户端接收。如果客户端接收数据包慢,sql
server没有地方存放新数据结果时,这时任务进入ASYNC_NETWORK_IO等待状态。

  1. 从实例级别查看ASYNC_NETWORK_IO

   图片 1

   平均耗时: 46366950.0/43014737.0=1.077ms, 最大等待时间:~40秒。

  2. 重现ASYNC_NETWORK_IO等待

     为了演示ASYNC_NETWORK_IO
现象,我们需要输出一个大结果集。当sql
server内存完全被使用后,大量的数据填充到缓存里,此时sql
server没有地方存放新数据结果,进入等待状态。

-- 一次查询100000条数据输出到客户端
SELECT TOP 100000 * FROM PUB_Stock WITH(nolock)

  监听到的会话如下:

  图片 2

  使用dbcc inputbuffer 查询64结果如下:

    图片 3

  3.分析与解决

    这个等待出现的问题强调以下几点:

    (1) 客户端没有把数据及时取走,调整sqlserver
的配置一般情况下是不是有什么大的帮助。

    (2) 网络层可能是问题的原因。 
解决:1是减少对客户端大量数据输出。 2是加大sqlserver 的network packe
size,从一定程度上优化网络转输的性能,但会增加内存的开销(建议小于设置小于8kb)。

    network packe
size是客户端与sqlserver通信的每个数据包大小有关系。network packe
size设置的数据包存放于内存功能组件的connection类别里。默认是4kb设置,输入输出缓存会放在buffer
pool里,如果改成了8kb 或更大,输入输出缓存会放在multi-page里
关于内存可查看sql server
内存初探。 设置network
packe size 可以由sp_configure控制。客户端应用程序可以覆盖此值如在.net
里配置如下。

Data Source=(local);Initial Catalog=AdventureWorks;"Integrated Security=SSPI;Packet Size=512

    演示将 net work packe size设置成6050字节

USE AdventureWorks2012 ;  
GO  
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE ;  
GO  
EXEC sp_configure 'network packet size', 6500 ;  
GO  
RECONFIGURE;  
GO 

   也可以能过界面来配置

  图片 4

    (3) 应用程序端性能问题,也会导致sql
server里的ASYNC_NETWORK_IO等待。

      sqlserver
的网络层将结果集打包好发向客户端以后,要等到客户端确认收到,才会接着发下一个包。

    (4) 分布式锁

      如果长时间看到ASYNC_NETWORK_IO,同时在sqlserver内部又造成了阻塞,并且该等待持续了很久,就该怀疑是否是分布式的死锁。

  总结:当遇到ASYNC_NETWORK_IO等待,需要检查应用程序自己的健康状况,也要检查应用是否有必要向sql
server 申请这么大的结果集返回,一般来讲sqlserver 本身没有什么问题。

转自:http://www.maomao365.com/?p=6227

数据:信息,记录。阅读;

二. 其它网络I/O等待

  这里还有其它几个NET_WAITFOR_PACKET,PROXY_NETWORK_IO,EXTERNAL_SCRIPT_NETWORK_IOF。
  2.1 NET_WAITFOR_PACKET: 在msdn中解释是
网络读取过程中,连接正在等待网络数据包时出现。

    实际级等待如下图所示:
    图片 5
  
2.2
后面二个proxy_network_io,external_script_network_iof。在生产环境下没有数据。在msdn中也没有找到相应解释。只能通过字面含义去解释。

摘要:

数据库:数据的仓库,存储许多的数据(信息)。按照数据结构来组件、存储和管理数据的,建立在计算机存储设备上的仓库。

下文将制作一个isnumber验证整型的函数,供在sql脚本中做数值判断,如下所示:

DBMS:   database management System   => 称为: 数据源库管理系统

例:
实现原理:判断 是否包含特殊字符,是否全部为0-9的自然数组成
 

常用的有:Oracle 、SQLSERVER、DB2 、MySql

CREATE FUNCTION dbo.check_number
(
/*验证一字符串类型是否为整型数值类型*/
@checkTmp VARCHAR(100)
)
RETURNS BIT
BEGIN
DECLARE @tmp BIT
IF LEFT(@checkTmp, 1) = '-'
SET @checkTmp = SUBSTRING(@checkTmp, 2, LEN(@checkTmp))
IF (PATINDEX('%[^0-9-]%', @checkTmp) = 0
AND CHARINDEX('-', @checkTmp) <= 1
AND @checkTmp NOT IN ('.', '-', '+', '^')
AND LEN(@checkTmp)>0
AND @checkTmp NOT LIKE '%-%')
SET @tmp = 1
ELSE
SET @tmp = 0
RETURN @tmp
END
GO

/*数据验证*/
SELECT '878' [测试数值],dbo.check_number('999') [测试返回值];
SELECT 'testData' [测试数值],dbo.check_number('abc') [测试返回值];
SELECT '8-8' [测试数值],dbo.check_number('9+9') [测试返回值];
SELECT '8.9' [测试数值],dbo.check_number('$9.9') [测试返回值];
SELECT 'maomao365.com' [测试数值],dbo.check_number('maomao365.com') [测试返回值];
go
drop function check_number

MySql(属于Oracle):关系型数据库管理系统。(1996年 MySql AB公司
到2008年被 sun公司 收购)

 

MySql特点:

  1. ###### 开源,免费(成本低)。

  2. ###### 体积小,简单易学。

  3. ###### 性能好,服务稳定,安全性能高。

  4. ###### 支持性很好。尤其对java、php支持性高。

常用命令:

  • 启动:mysqld
  • 链接:mysql -uroot -p      /       mysql -u root -p
  • 显示数据库:show databases
  • 打开某个数据库:use [数据库名] ;
  • 显示表:show tables
  • 退出链接:exit  /  quit
  • 停止mysql服务:mysqladmin -u root shutdown (不要打分号)
  • 修改密码:update user set password=password(‘新密码’) where
    user=’root’

==============================================================

Mysql的图形化工具:mysqlweb、phpadmin、Navicat、SQLyog

推荐使用:Navicat  ;  
特点:简单易学(免费),能链接多种数据库(mysql,Oracle…)

Navicat链接mysql时,注意:高级里面必须选择编码为UTF-8

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图