1) 双方计算机打开,且设置了网络共享资源;
  2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
  3) 双方都正确设置了网内IP地址,且必须在一个网段中;
  4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。
Windows 98/2000/XP/2003访问XP的用户验证问题
  首先关于启用Guest为什么不能访问的问题:
  1、默认情况下,XP 禁用Guest帐户
  2、默认情况下,XP的本地安全策略禁止Guest用户从网络访问
  3、默认情况下,XP的 本地安全策略 -> 安全选项 里,"帐户:使用空密码用户只能进行控制台登陆"是启用的,也就是说,空密码的任何帐户都不能从网络访问只能本地登陆,Guest默认空密码......
  所以,如果需要使用Guest用户访问XP的话,要进行上面的三个设置:启用Guest、修改安全策略允许Guest从网络访问、禁用3里面的安全策略或者给Guest加个密码。
  有时还会遇到另外一种情况:访问XP的时候,登录对话框中的用户名是灰的,始终是Guest用户,不能输入别的用户帐号。
  原因是这个安全策略在作怪(管理工具 -> 本地安全策略 -> 安全选项 -> "网络访问:本地帐户的共享和安全模式")。默认情况下,XP的访问方式是"仅来宾"的方式,那么你访问它,当然就固定为Guest不能输入其他用户帐号了。
  所以,访问XP最简单的方法就是:不用启用Guest,仅修改上面的安全策略为"经典"就行了。别的系统访问XP就可以自己输入帐户信息。
  至于访问2003,默认情况下2003禁用Guest,但是没有 XP 那个讨厌的默认自相矛盾的来宾方式共享,所以可以直接输入用户名密码访问。
  一个小型办公局域网,都是winxp系统,都能上外网,也能看到对方计算机,却不能看到对方共享的计算机提示网络路径不正确,或你没有权限使用网络 大概就是这个意思 我记的不太清楚!!来宾帐户我也启用了!winxp的防火墙也是关闭的,ip地址也没什么问题!!希望大家给分析一下!!非常感谢!
  原因:Win2000/XP中存在安全策略限制。
  有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,比如使用了类似瑞星等的防火墙漏洞修补,它会修改"拒绝从网络访问这台计算机"的策略,按下面的方法修改回来:
  开始 -> 运行 -> gpedit.msc -> 计算机配置 -> windows设置 -> 本地策略 -> 用户权利分配 -> 删除"拒绝从网络访问这台计算机"中的guest用户。
  Win2000/XP与Win98互访
  如果两台电脑都使用Win2000/XP操作系统,那么组建局域网是一件非常简单轻松的事情,当硬件连接完成后,正常情况下立即可以在"网上邻居"中看到对方。但如果局域网中有一台电脑使用Win98,那情况可就不一定了,我们经常会发觉虽然Ping命令可以通过,但仍然无法在"网上邻居"中实现互访,这时该怎么办呢?
  对策一:在Win2000/XP中启用Guest用户。在Win2000/XP系统安装之后会缺省建立两个用户账户,即Administrator(系统管理员)和Guest(来宾账户),所有在本地计算机没有被分配到账户的用户都将默认使用Guest账户,该账户是没有密码的。不过,在缺省设置下,这个Guest账户并未被启用,我们可以从"控制面板  管理工具  计算机管理  本地用户和组  用户"中找到"Guest"账户,并用鼠标右击打开"Guest属性"对话框,去除这里的"账户已停用"复选框上的对钩标记,这样退出后就可以从Win98中访问到Win2000/XP了。
  其实,启用了Guest账户后,最大的好处是从Win98访问Win2000/XP时就不需要输入用户名和密码了,这种方法比较适合于用户不确定、访问量较大的局域网,但对家庭用户来说并不适用。
  对策二:检查Win2000/XP中是否存在安全策略限制。有时,Win2000/XP"聪明"过了头,虽然我们已经启用了Guest账户,从Win98中却仍然无法访问Win2000/XP,这时就要从"控制面板  管理工具  本地安全策略  本地策略  用户权利指派"中找到"从网络访问此计算机"或者"拒绝从网络访问这台计算机",然后检查一下其中是否出现了Guest账户或者其他对应的账户,然后根据不同情况进行添加或者删除即可。
  对策三:停用本地连接上的防火墙。防火墙是充当网络与外部世界之间的保卫边界的安全系统,微软在WinXP中为用户提供了一个内置的Internet连接防火墙(ICF),启用后可以限制某些不安全信息从外部进入内部网络。不过,如果您是在本地连接上启用了这个防火墙,那么就会造成工作组之间无法互访,出现"XXX无法访问"、"您可能没有权限使用网络资源"、"请与这台服务器的管理员联系以查明您是否有访问权限"、"找不到网络路径"等类似的提示,此时请停用本地连接的防火墙屏蔽。
  对策四:为WinXP添加NetBEUI协议。其实,直接添加NetBEUI协议对于解决不能互访的问题有时反而更为简单一些,而且它可以解决上面提到的启用防火墙的问题。Win98安装时会自动安装NetBEUI协议,但由于WinXP已经不再提供对NetBEUI协议的技术支持,因此只能手工添加了。
  找出WinXP安装光盘,进入"valueadd\Msft\Net\Netbeui"文件夹下,这里有Nbf.sys、Netbeui.txt、Netnbf.inf共3个文件,先将Nbf.sys文件复制到本机的"Windows\System32\Drivers"文件夹下(这里的本机指安装了WinXP的那台电脑),再将Netnbf.inf文件复制到本机的"Windows\INF"文件夹下,Netbeui.txt文件可有可无。不过, INF文件夹具有隐藏属性,用户需要先在WinXP下的"工具  属性"窗口中选择显示文件才可以看到该目录。
  对策五:启用Win98中的"文件及打印机共享"。这是一个很简单但却经常被人忽略的问题,就是装有Win2000/XP的机器虽然可以从"网上邻居"中发现装有Win98的机器,但却无法访问,这是因为Win98未启用"允许其他用户访问我的文件"而造成的,启用该选项就可以解决这个问题。
  当然,除了上面提到的各种原因外,还有两台电脑不处于同一工作组中,或者是两台电脑的内部IP地址发生了冲突,甚至包括Hub故障、线路故障等。
  微软知识库文章,Microsoft Knowledge Base Article - 318030
  无法访问共享文件和文件夹或者浏览工作组中的计算机
  http://support.microsoft.com/default.aspx?scid=kb;cn;318030
  3) 双方都正确设置了网内IP地址,且必须在一个网段中;
、为什么Windows 98网上邻居中找不到域及服务器,但可找到其他的工作站?
解答:
在"控制面板→网络→Microsoft网络客户"中,将登录时Windows 98与网络的连接由慢速改为快速连接。
2、为什么在查看"网上邻居"时,会出现 "无法浏览网络。网络不可访问。想得到更多信息,请查看帮助索引中的网络疑难解答专题。"的错误提示?
解答:
(1)在Windows启动后,要求输入Microsoft网络用户登录口令时,点了"取消"按钮所造成的,如果是要登录NT服务器,必须以合法的用户登录,并且输入正确口令。
(2)与其它的硬件起冲突。打开"控制面板→系统→设备管理"。查看硬件的前面是否有黄色的问号、感叹号或者红色的问号。如果有,必须手工更改这些设备的中断和I/O地址设置。
3、为什么在"网上邻居"或"资源管理器"中只能找到本机的机器名?
解答:
网络通信错误,一般是网线断路或者与网卡的接确不良,还有可能是Hub有问题。
4、为什么可以访问服务器,也可以访问Internet,但却无法访问其他工作站?
解答:
(1)如果使用了WINS解析,可能是WINS服务器地址设置不当。
(2)检查网关设置,若双方分属不同的子网而网关设置有误,则不能看到其他工作站。
(3)检查子网掩码设置。
5、为什么网卡安装不上?
解答:
(1)计算机上安装了过多其它类型的接口卡,造成中断和I/O地址冲突。可以先将其他不重要的卡拿下来,再安装网卡,最后再安装其他接口卡。
(2)计算机中有一些安装不正确的设备,或有"未知设备"一项,使系统不能检测网卡。这时应该删除"未知设备"中的所有项目,然后重新启动计算机。
(3)计算机不能识别这一种类型的网卡,一般只能更换网卡。
6、为什么可以Ping通IP地址,但Ping不通域名?
解答:
TCP/IP协议中的"DNS设置"不正确,请检查其中的配置。对于对等网,"主机"应该填自己机器本身的名字,"域"不需填写,DNS服务器应该填自己的IP。对于服务器/工作站网,"主机"应该填服务器的名字,"域"填局域网服务器设置的域,DNS服务器应该填服务器的IP。
7、为什么网络上的其他计算机无法与我的计算机连接?
解答:
(1)确认是否安装了该网络使用的网络协议?如果要登录NT域,还必须安装NetBEUI协议。
(2)是否安装并启用了文件和打印共享服务?
(3)如果是要登录NT服务器网络,在"网络"属性的"主网络登录"中,应该选择"Microsoft网络用户"。
(4)如果是要登录NT服务器网络,在"网络"属性框的"配置"选项卡中,双击列表中的"Microsoft网络用户"组件,检查是否已选中"登录到Windows域"复选框,以及"Windows
域"下的域名是否正确。
8、为什么安装网卡后,计算机启动的速度慢了很多?
解答:
可能在TCP/IP设置中设置了"自动获取IP地址",这样每次启动计算机时,计算机都会主动搜索当前网络中的DHCP服务器,所以计算机启动的速度会大大降低。
解决的方法是"指定IP地址"。
9、为什么在网络邻居中看不到任何计算机?
解答:
主要原因可能是网卡的驱动程序工作不正常。请检查网卡的驱动程序,必要时重新安装驱动程序。
10、为什么能够看到别人的机器,但不能读取别人电脑上的数据?
解答:
(1)首先必须设置好资源共享。选择"网络→配置→文件及打印共享",将两个选项全部打勾并确定,安装成功后在"配置"中会出现"Microsoft 网络上的文件与打印机共享"
选项。
(2)检查所安装的所有协议中,是否绑定了"Microsoft网络上的文件与打印机共享"。
选择"配置"中的协议如"TCP/IP协议",点击"属性"按钮,确保绑定中"Microsoft网络上的文件与打印机共享"、"Microsoft网络用户"前已经打勾了。
11、为什么在安装网卡后通过"控制面板→系统→设备管理器"查看时,报告"可能没有该设备,也可能此设备未正常运行,或是没有安装此设备的所有驱动程序"的错误信息?
解答:
(1)没有安装正确的驱动程序,或者驱动程序版本不对。
(2)中断号与I/O地址没有设置好。有一些网卡通过跳线开关设置;另外一些是通过随卡带的软盘中的Setup程序进行设置。
12、为什么已经安装了网卡和各种网络通讯协议,但"文件及打印共享"是虚的,无法选择?
解答:
原因是没有安装"Microsoft 网络上的文件与打印共享"组件。在"网络"属性窗口的"配置"标签里,单击"添加"按钮,在"请选择网络组件"窗口单击"服务",单击"添加"按
钮,在"选择网络服务"的左边窗口选择"Microsoft",在右边窗口选择"Microsoft网络上的文件与打印机共享",单击"确定"按钮,系统可能会要求插入Windows安装光盘,重
新启动系统即可。
13、为什么无法在网络上共享文件和打印机?
解答:
(1)确认是否安装了文件和打印机共享服务组件。要共享本机上的文件或打印机,必须安装"Microsoft网络上的文件与打印机共享"服务。
(2)确认是否已经启用了文件或打印机共享服务。在"网络"属性框中选择"配置"选项卡,单击"文件与打印机共享"按钮,然后选择"允许其他用户访问的我的文件"和"允许
其他计算机使用我的打印机"选项。
(3)确认访问服务是共享级访问服务。在"网络"属性的"访问控制"里面应该选择"共享级访问"。
14、为什么无法登录到网络上?
解答:
(1)检查计算机上是否安装了网络适配器,该网络适配器工作是否正常。
(2)确保网络通信正常,即网线等连接设备完好。
(3)确认网络适配器的中断和I/O地址没有与其他硬件冲突。
(4)网络设置可能有问题。
15、为什么无法将台式电脑与笔记本电脑使用直接电缆连接?
解答:
笔记本电脑自身可能带有PCMCIA网卡,在"我的电脑→控制面板→系统→设备管理器"中删除该"网络适配器"记录后,重新连接即可。
重名导致共享出现冲突
  也许你会在局域网中经常遇到这样的奇怪现象,那就是打开“网上邻居”窗口时,发现服务器中的某个共享目录有时可以打开,但有时又不可以打开,这种现象到底是由什么原因引起的呢,又该如何解决呢?其实这种现象排除人为对共享目录进行设置外,很有可能是服务器的计算机名称与局域网中其他工作站的名称相同,从而容易造成服务器中的共享资源出现冲突现象。要消除这一现象,你不妨先把局域网中除了服务器以外的工作站全部先关闭,然后再逐一打开每一台计算机进行共享访问测试,一旦发现某个计算机被打开后,服务器的共享目录不能访问的话,那基本可以断定该计算机的名称肯定与服务器相同;此时你可以在该计算机的系统桌面中,用鼠标右键单击“我的电脑”图标,从弹出的右键菜单中单击“属性”命令,在其后出现的属性设置窗口中,单击“计算机名”标签,然后在如图1所示的标签页面中,修改一下计算机名称,确保新设置的计算机名称不和局域网中的任何一台计算机名称重复,这样就能保证局域网中的共享目录因计算机重名而出现冲突了。
     当然,要是局域网服务器的操作系统安装的是Windows 2003 Server的话,那你还要检查一下服务器中是否安装了ISA,要是已经安装的话,你不妨依次单击“开始”/“运行”命令,在弹出的系统运行对话框中,输入字符串命令“services.msc”,单击“确定”按钮后,打开服务器系统的服务列表界面;双击该界面中的“Computer Brows”服务项目,在接着出现的服务属性界面中,将“启动类型”设置为“禁用”,最后单击“确定”按钮,这样说不定也能避免服务器中的共享目录,一会儿可以访问、一会儿又不可以访问的奇怪现象。

干扰导致共享突然消失
有一则更奇怪的共享访问故障,相信大家也经常遇到,那就是在局域网计算机相互之间的连接和共享都正常的情况下,通过局域网网络传输几兆容量或几十兆容量的数据时也很正常,但是一旦传输上百兆容量的数据信息时,共享目录可能就会突然消失、而且还会弹出网络资源不足的错误提示。那么这种奇怪现象到底是什么因素引起的呢,我们又该如何来应对呢?
  其实从上面的分析我们不难看出,整个局域网既然物理连接和平时共享都是正常的,这表示局域网在硬件的连接、网络参数的设置以及软件的访问设置方面都应该是正确的,但考虑到大容量数据在网络中传输时需要对数据进行频繁读取,如果整个局域网的传输环境不是非常平稳的话,例如要是局域网线路受到干扰的话,那么局域网传输环境的平稳性就受到了破坏,那么在传输大容量数据信息时就容易出现共享突然消失的故障。
  要想排除这样的故障,就必须对局域网的传输环境进行逐一检查;考虑到网络中的路由器、集线器以及交换机等物理设备,不大容易受到外界的干扰,所以我们应该把检查的重点聚焦在传输介质或网卡上。对于网卡来说,除了要尽可能地使用品牌网卡来提升网卡自身的抗干扰能力外,还要把网卡安装到机箱的合适位置处。例如一旦机箱结构紧凑,那么把网卡、声卡、显卡以及其他插卡紧紧地安装在一起的话,网卡就容易受到其他插卡发出的电磁波的干扰,这样网卡稳定性就会大大下降;要想提高网卡的工作稳定性,就必须让网卡安装到离其他插卡比较远的一个插槽中。
  同样地,传输介质也特别容易受到外界电磁波的干扰,为此大家在选用传输介质时,应尽可能地使用具有屏蔽功能的介质,以避免通信信号受到外界电磁波干扰,例如五类双绞线或超五类双绞线都有电磁波屏蔽功能。此外,任何一个网络设备或计算机都应该远离电磁辐射强的设备,例如音响、电视机、高压线等,这样可以尽可能地保证局域网处于一个相对平稳的工作环境。
登录不当导致共享丢失
在局域网连接正常的情况下,以前可以访问的共享目录,现在一个都不见了的话,那十有八九是你没有进行正确登录造成的。无论你设置了Windows登陆、Microsoft友好登陆,还是Microsoft网络登录,任意一台工作站在开始启动时,都需要你正确输入登录用户名以及密码,一旦你输错了用户名或者密码,甚至直接在登陆界面中单击“取消”按钮进入到计算机系统的话,那么出现在该计算机网络邻居窗口中的所有共享目录都会丢失的。那么如何才能快速知晓自己的计算机是否已经登录过了呢?其实很简单,你只要依次打开“开始”/“注销”命令,然后检查一下“注销”命令后面是否有用户名,要是没有用户名的话就表明该系统还没有被正确登陆。此时你可以单击一下“注销“命令,让Windows系统重新启动一下,当弹出登录界面时,必须正确输入登录用户名以及密码,再单击“确定”按钮进入到计算机系统中;此时再打开网上邻居窗口时,你就能找到丢失的共享目录了
设置不当导致共享取消
  如果你可以正常访问局域网中其他工作站的共享资源,惟独无法访问其中一台计算机中的共享资源时,那你
就要对该目标计算机的网络设置进行一下检查,看看该计算机的IP地址是否设置正确,看看是否启用了文件及打印共享功能。在检查网络设置时,可以按照如下步骤来进行:
  首先依次单击“开始”/“设置”/“网络和拨号连接”命令,在弹出的网络连接窗口中,用鼠标双击本地连接图标,从弹出的快捷菜单中执行“属性”命令,打开网络参数设置窗口;
  然后选中该窗口中的“Internet协议(TCP/IP)”选项,并单击一下“属性”按钮,再其后出现的界面中,就能检查到IP地址是否设置恰当了,要是不正确的话,你只要重新为其分配合适的IP地址就可以了;
  在确保IP地址正确的前提下,看看其中的“Microsoft网络的文件和打印机共享”选项是否已经被选中,要是没有的话,也必须将该选项选中,这样才能确保本地计算机的资源被其他人共享访问。

 当然,要是上面的步骤还无法让目标计算机中的资源被其他人访问的话,那你就必须从物理连接的角度,来检查一下该计算机的连通性了。检查连通性时主要包括下面内容:1、检查网卡信号灯是否闪烁,要是不闪烁的话,就表明目标计算机与集线器之间的连接不正常,此时你应该看看网线两端是否连接好,或者集线器电源是否已经打开,或者网卡安装是否正确;2、检查网卡对应的集线器端口信号灯是否正常闪烁,要是不闪烁的话,可以尝试更换通信端口;3、可以用专业工具检测网线的连同性。

共享名长导致访问出错
  要是在本地计算机中,可以访问目标计算机中的其他共享文件夹,惟独对其中一个共享文件夹无法访问的话,那你就需要对那个目标共享文件夹的属性进行一下检查。除了目标共享文件夹的访问权限需要检查外,重点还要看一下该文件夹的共享名称是否太长,要是共享名称包含有很多字符的话,最好将其限制在8个字符以内;修改文件夹的共享名称很简单,只要你在系统的资源管理器窗口中,找到目标共享文件夹,并用鼠标右键单击该文件夹,从弹出的右键菜单中执行“重命名”命令,然后输入新的名称就可以了。此外,如果目标计算机的名称太长的话,也会对局域网的共享访问造成一定的影响。
端口屏蔽导致共享受限
  有时你明明设置了共享文件夹,而且在网络连接正常的情况下,却偏偏访问不到该目标共享文件夹;出现这种现象,多半是共享文件夹所在的计算机139端口、445端口遭受到了屏蔽。要想正常访问到该目标共享文件夹,你必须解除对计算机139端口、445端口的屏蔽操作:
  首先打开“网络和拨号连接”窗口,右击“本地连接”图标,并从快捷菜单中执行“属性”命令,在弹出的网络属性设置窗口中,单击“常规”标签,并选中对应标签页面中的“Internet协议(TCP/IP)”项目;
  然后单击一下“属性”按钮,进入到TCP/IP协议的属性设置界面中,并单击其中的“高级”按钮,再单击高级设置框中的“选项”标签,弹出的设置页面;继续单击该设置页面中的“TCP/IP筛选”选项,并单击“属性”按钮,在其后的设置窗口中,检查一下计算机系统是否已经启用了“TCP/IP添加筛选器”功能;要是已经启用的话,可以将“启用TCP/IP筛选”选项取消掉,这样139端口、445端口的屏蔽操作就被取消了。
如果你是通过防火墙来屏蔽139端口、445端口的话,那你只要把防火墙程序临时关闭一下,就能正常访问共享文件夹了。如果你是通过自定义IP安全策略的方法来屏蔽139端口、445端口的话,那你可以依次单击“开始”/“运行”命令,在弹出的系统运行对话框中,输入组策略编辑命令“gpedit.msc”,单击“确定”按钮后,打开系统的组策略编辑界面;
  依次展开该界面中的“计算机配置”/“Windows设置”/“安全设置”/“IP安全策略……”,在图5界面的右边区域中,找到对应的IP安全策略,然后将其直接删除掉就可以了。
此外, 对于445端口来说,你也可以通过修改注册表的方法,来快速解除对该端口的屏蔽操作;只要在打开的系统注册表编辑界面中,依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters注册表分支,在对应Parameters分支的右边子窗口中,双击“SMBDeviceEnabled”键值,在其后打开的数值设置界面中,输入数字“1”,并单击“确定”按钮就可以了
同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。

安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境,当然需要有不同的配制文件了。

一般的情况下,my-medium.cnf这个配制文件就能满足我们的大多需要;一般我们会把配置文件拷贝到/etc/my.cnf 只需要修改这个配置文件就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的参数,有3个配置参数是最重要的,即key_buffer_size,query_cache_size,table_cache。

key_buffer_size只对MyISAM表起作用,

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql,以下的状态值都是本人通过phpmyadmin获得的实例分析:

这个服务器已经运行了20天
key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112
比例接近1:8000 健康状况非常好

另外一个估计key_buffer_size的办法 把你网站数据库的每个表的索引所占空间大小加起来看看以此服务器为例:比较大的几个表索引加起来大概125M 这个数字会随着表变大而变大。

从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。

通过调节以下几个参数可以知道query_cache_size设置得是否合理
Qcache inserts
Qcache hits
Qcache lowmem prunes
Qcache free blocks
Qcache total blocks

Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,同时Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。
Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多query_cache_type指定是否使用查询缓冲

我设置:
query_cache_size = 32M
query_cache_type= 1
得到如下状态值:
Qcache queries in cache 12737 表明目前缓存的条数
Qcache inserts 20649006
Qcache hits 79060095  看来重复查询率还挺高的
Qcache lowmem prunes 617913 有这么多次出现缓存过低的情况
Qcache not cached 189896   
Qcache free memory 18573912  目前剩余缓存空间
Qcache free blocks 5328 这个数字似乎有点大 碎片不少
Qcache total blocks 30953
如果内存允许32M应该要往上加点

table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

对于有1G内存的机器,推荐值是128-256。

笔者设置table_cache = 256
得到以下状态:
Open tables 256
Opened tables 9046
虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,已经运行了20天,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述值 那就要考虑增大table_cache。

如果你不需要记录2进制log 就把这个功能关掉,注意关掉以后就不能恢复出问题前的数据了,需要您手动备份,二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制( Replication )的话,也需要使用二进制日志传送修改情况。

log_bin指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。

关掉这个功能只需要在他前面加上#号
#log-bin

开启慢查询日志( slow query log )

慢查询日志对于跟踪有问题的查询非常有用。它记录所有查过long_query_time的查询,如果需要,还可以记录不使用索引的记录。下面是一个慢查询日志的例子:

开启慢查询日志,需要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。

log_slow_queries指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。long_query_times指定慢查询的阈值,缺省是10秒。log-queries-not-using-indexes是4.1.0以后引入的参数,它指示记录不使用索引的查询。笔者设置long_query_time=10

笔者设置:
sort_buffer_size = 1M
max_connections=120
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
interactive_timeout=120
thread_concurrency = 4

参数说明:
back_log
要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 Unix listen(2)系统调用的手册页应该有更多的细节。检查你的OS文档找出这个变量的最大值。试图设定back_log高于你的操作系统的限制将是无效的。
max_connections
并发连接数目最大,120 超过这个值就会自动恢复,出了问题能自动解决

thread_cache
没找到具体说明,不过设置为32后 20天才创建了400多个线程 而以前一天就创建了上千个线程 所以还是有用的

thread_concurrency
#设置为你的cpu数目x2,例如,只有一个cpu,那么thread_concurrency=2
#有2个cpu,那么thread_concurrency=4

skip-innodb
#去掉innodb支持
用mysqldumpslow分析mysql的slow query log

mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysql启动的时候加入一些参数。如果在my.cnf里面修改,需增加如下几行
引用
long_query_time = 1
log-slow-queries = /var/youpath/slow.log
log-queries-not-using-indexes[这个在mysql4.10以后才被引入]

long_query_time 是指执行超过多久的sql会被log下来,这里是1秒。
log-slow-queries 设置把日志写在那里,可以为空,系统会给一个缺省的文件host_name-slow.log,我生成的log就在mysql的data目录
log-queries-not-using-indexes 就是字面意思,log下来没有使用索引的query。
把上述参数打开,运行一段时间,就可以关掉了,省得影响生产环境。

接下来就是分析了,我这里的文件名字叫host-slow.log。
先mysqldumpslow –help以下,我主要用的是
引用
-s ORDER what to sort by (t, at, l, al, r, ar etc), ‘at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
-s,是order的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有
c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒叙
-t,是top n的意思,即为返回前面多少条的数据
-g,后边可以写一个正则匹配模式,大小写不敏感的

mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g “left join” host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。
用了这个工具就可以查询出来那些sql语句是性能的瓶颈,进行优化,比如加索引,该应用的实现方式等。  
一. 启动参数优化
修改 my.cnf (或者my.ini),加入/修改以下几行
引用

#设定缓存的连接数,节省连接时的开销
back_log  = 64

#禁用文件系统外部锁
external-locking  = 0

#禁用BDB,如果你确实不需要的话,innodb也是如此
skip-bdb

#索引缓冲,如果是专用的数据库服务器,可以设置高达服务器内存的一半,如果不是专用的,还是设置得低一点
key_buffer  = 512M

#缓存数据表数量,如果内存较大,可以设置稍微高一点,否则还是设置低一点
#设置这个参数可以参见系统状态中的 open_tables(表示当前打开的数据表总数) 和 opened_tables(表示所有打开的数据表总数)
table_cache  = 128

#禁用dns解析,如果你的授权信息中采用dns授权方式了,就不能启用该选项
skip-name-resolve

#记录慢查询和没有使用索引的查询,便于帮助分析问题所在
long_query_time    = 1
log-slow-queries  = /usr/local/mysql/data/slow.log
log-queries-not-using-indexes

其他参数诸如 sort_buffer_size,net_buffer_length,read_buffer_size,read_rnd_buffer_size,myisam_sort_buffer_size,thread_cache_size,query_cache_size,max_binlog_cache_size 等请查询MySQL手册,然后做出合适的调整.


二. 其他小TIPS
引用

针对Innodb表,尽量不执行 SELECT COUNT(*) 语句,因为Innodb表没有类似MyISAM那样的内部计数器来记录表记录总量,执行这个操作将会全表扫描,速度很慢.

尽量使用MyISAM表,除非必须使用其他类型,因为MyISAM类型的总体读写效率是相当高的,缺点是表级锁,而不是行/页级锁.

善用 EXPLAIN来帮助你分析查询优化情况

如果需要对一个较大的且并发读写较多的数据表做 GROUP BY 等统计操作,建议使用摘要表来存储统计信息,定期更新统计表,这可能获得很大的性能改善.

查询时如果有 ORDER BY分句的话,注意让它的字段顺序和索引字段顺序对应,这样能加快排序速度

如果有一个多字段索引,则查询时,必须按照索引顺序来使用,否则该索引不会用到.例如:
索引 `idx_`(col1, col2, col3),那么查询 SELECT …. FROM … WHERE col1=1 AND col2=2; 使用索引,而查询 … WHERE col2=2 AND col3=3; 或 … WHERE col1=1 AND col3=3; 则不使用索引.

2 个表连接时,连接字段的类型最好一致(包括字段长度),这样的话索引速度快多了.

大部分情况下,字符类型的字段索引值需要一部分,例如 CREATE INDEX char_idx ON tbl1 ( name(10) );

尽量使用最合适的数据类型,能使用 ENUM 就不使用 TINYINT ,能使用 SMALLINT 就不使用 MEDIUMINT.这样能节省存储空间,增加数据存储量,提高搜索速度.不要担心这样会对省级产生很大的影响,因为加入从 TINYINT 类型改变为 INT 的话,并不会改变原来的数据.

如果知道某个表总是频繁使用的话,可以把它放到 hot_cache 中,用以下方法:
SET GLOBAL hot_cache.key_buffer_size=128*1024;
CACHE INDEX `xxx` IN hot_cache;

把拖沓复杂,速度慢的的查询分解成多个简洁明了的查询,这样尽管查询次数多了,但是总体速度和效率却可能反而更高了,而且也减少了锁表的可能.

执行查询时,尽量不使用外部函数,因为这样的话就无法使用可能存在的索引,并且无论如何都会极大地降低效率.如: … WHERE `create_time` > UNIX_TIMESTAMP(NOW()); 这样的查询.可以在程序中把当前的时间取得,然后直接执行构造好了的SQL语句.

在索引字段上使用 LIKE 查询时,左边不要使用 ‘%’ 修饰符,这样就可以利用索引,否则无法使用索引.如 … `name` LIKE ‘yejr%’;.

如果有可能,多使用存储过程,这大概能获得 22% 的性能提高.

如果并发访问量相对最大连接数小多了的话,最好使用永久连接,这样能节省不少连接时的系统资源损耗.

定期的在MyISAM表上执行 OPTIMIZE TABLE,这能整理随便,提高索引效率.

如果你主要按 col1,col2,…顺序检索记录,请在对表大量更改后执行 ALTER TABLE … ORDER BY col1, col2, … 语句,这可以获得更好的性能.

对于频繁更改的MyISAM表,应尽量避免更新所有变长字段(VARCHAR、BLOB和TEXT).

对于记录总数超过500万的单表,就应该赶紧考虑分表了.分表策略有多种,比如按ID号段,或者按时间切分,等等.

创建数据表时尽量指定字段不能为NULL,并且有默认值.

使用 LOAD DATA,而不是使用大批量的 INSERT 语句来导入数据.

使数据表名和字段名尽可能的短,例如在 user 表中使用字段名 name,而不是 user_name.

用 DELAY_KEY_WRITE = 1 选项让MyISAM更快地更新索引,因为在表关闭之前它们不刷新到硬盘上.缺点是如果服务器如果突然被杀掉了,重启之后就必须运行 myisamchk 修复索引才行.

采用复制机制来分摊读数据的负载,把写数据只放在主服务器上,把读平均分摊到各个从服务器上,能大大提高系统负载.
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]