最热门文章

常用标签

云输入法 好的站点 数据之美 数据库优化 网站优化 网页安全 跨浏览器 输入法 重构 页面优化 Android CSS css优化 facebook firebug HTML html重构 html5 HTTP协议 http历史 ie javascript Last Modified lighttpd linux linux后台开发 MYSQL mysql优化 netstat ping QQ QQ云输入法 QQWeb输入法 web web开发 Web服务器 web服务器配置 web设计 WEB颜色 xhtml

Posts Tagged ‘linux后台开发’

Mysql的索引优化

当数据量到达一定的量级之后,一般而言是10万。数据库mysql的索引将变得尤其的重要。 没有索引的话,mysql将会遍历整个表来查询满足的条件,大家想想遍历一遍1000万的数据需要多长的时间呢。 不过,在使用mysql的索引的时候,小小的注意几点可能会给存储性能以及执行查询和更新语句的性能带来很大的提高。 根据实际操作中的一些经验,总结几条如下: 1 只有需要用到了字段才为其简历索引,索引也是为占用存储空间的。如果索引过多的话,更新的时候也要更新索引部分的数据,性能就不怎么好了。 2  简短的字符串类的索引,如char、varchar、text的列而言,如果能够确定索引的长度的就确定索引的长度,不要使用一个长长的索引长度,性能影响很大 3  除了主键以为还可以使用unique索引,一一对应的索引的话,如果hash表其查询的性能肯定是卓越的。因为只需要o(1)的复杂度晒。 4 遵从mysql的最左前缀的复合索引规则,根据where语句中使用的方式来定义复合的索引。例如建立了这么一个复合的索引(col1,col2,col3),那么在where时可以使用的索引有where col1 = **或者where col1 = ** and col2 = **或者 where col1 = ** and col2 = ** and col3 = ** 最后的话,explain你的sql语句看看是否使用到索引,如果没有,赶快去加上吧。 呵呵,还要注意一点哦,mysql提供的丰富多彩的字符串函数并不是一个很好的东东哦,这些函数应用在where中的列上时是不会使用到索引的。如 where ucase(col1) = ***,即使col1上有索引,由于使用了函数转换,mysql并不能使用上之前建立的索引值。


MYSQL错误码解释

使用mysql的api时,常常会遇到错误码。 总结了一下这些错误码的含义,方便后续程序遇到时来查看,呵呵。 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目录导致删除数据库失败 1011:删除数据库文件失败 1012:不能读取系统表中的记录 1020:记录已被其他用户修改 1021:硬盘剩余空间不足,请加大硬盘可用空间 1022:关键字重复,更改记录失败 1023:关闭时发生错误 1024:读文件错误 1025:更改名字时发生错误 1026:写文件错误 1032:记录不存在 1036:数据表是只读的,不能对它进行修改 1037:系统内存不足,请重启数据库或重启服务器 1038:用于排序的内存不足,请增大排序缓冲区 1040:已到达数据库的最大连接数,请加大数据库可用连接数 1041:系统内存不足 1042:无效的主机名 1043:无效连接 1044:当前用户没有访问数据库的权限 1045:不能连接数据库,用户名或密码错误 1048:字段不能为空 1049:数据库不存在 1050:数据表已存在 1051:数据表不存在 1054:字段不存在 1065:无效的SQL语句,SQL语句为空 1081:不能建立Socket连接 1114:数据表已满,不能容纳任何记录 1116:打开的数据表太多 1129:数据库出现异常,请重启数据库 1130:连接数据库失败,没有连接数据库的权限 1133:数据库用户不存在 1141:当前用户无权访问数据库 1142:当前用户无权访问数据表 1143:当前用户无权访问数据表中的字段 1146:数据表不存在 1147:未定义用户对数据表的访问权限 1149:SQL语句语法错误 1158:网络错误,出现读错误,请检查网络连接状况 1159:网络错误,读超时,请检查网络连接状况 1160:网络错误,出现写错误,请检查网络连接状况 1161:网络错误,写超时,请检查网络连接状况 1062:字段值重复,入库失败 1169:字段值重复,更新记录失败 1177:打开数据表失败 1180:提交事务失败 1181:回滚事务失败 1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库 1205:加锁超时 1211:当前用户没有创建用户的权限 1216:外键约束检查失败,更新子表记录失败 1217:外键约束检查失败,删除或修改主表记录失败 1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器 1227:权限不足,您无权进行此操作 1235:MySQL版本过低,不具有本功能


linux下errno全注释

在linux下写后台程序的时候,为了了解一些系统调用函数的出错信息,我们使用全局的errno来标识 但是对于errno你知道多少呢。 124 EMEDIUMTYPE   Wrong medium type 123 ENOMEDIUM     No medium found 122 EDQUOT        Disk quota exceeded 121 EREMOTEIO     Remote I/O error 120 EISNAM        Is a named type file 119 ENAVAIL       No XENIX semaphores available 118 ENOTNAM       Not a XENIX named type file 117 EUCLEAN       Structure needs cleaning 116 ESTALE        Stale NFS file handle 115 EINPROGRESS  +Operation now in progress 114 EALREADY      Operation already in progress 113 EHOSTUNREACH  No route to host 112 EHOSTDOWN     Host is down 111 ECONNREFUSED  Connection refused 110 ETIMEDOUT    +Connection timed out 109 ETOOMANYREFS  Too many references: cannot splice 108 ESHUTDOWN     Cannot send after transport endpoint shutdown 107 ENOTCONN      Transport endpoint is not connected 106 EISCONN       Transport endpoint is already connected 105 ENOBUFS       No buffer space available 104 ECONNRESET    Connection reset by peer 103 ECONNABORTED  Software caused connection abort 102 ENETRESET     Network dropped connection on reset 101 ENETUNREACH   Network is unreachable 100 ENETDOWN      Network is down 99 EADDRNOTAVAIL Cannot assign requested address 98 EADDRINUSE    Address already in use 97 EAFNOSUPPORT  Address family not supported by protocol 96 EPFNOSUPPORT  Protocol family not supported 95 EOPNOTSUPP    Operation not supported 94 ESOCKTNOSUPPORT Socket type not supported 93 EPROTONOSUPPORT Protocol not supported 92 ENOPROTOOPT   Protocol not available 91 EPROTOTYPE    Protocol wrong type for socket 90 EMSGSIZE     +Message too long 89 EDESTADDRREQ  Destination address required 88 ENOTSOCK      Socket operation on non-socket 87 EUSERS        Too many users 86 ESTRPIPE      Streams pipe error 85 ERESTART      Interrupted system call should be restarted 84 EILSEQ        Invalid or incomplete multibyte or wide character 83 ELIBEXEC      Cannot exec a shared library directly 82 ELIBMAX       Attempting to link in too many shared libraries 81 ELIBSCN       .lib section in a.out corrupted 80 ELIBBAD       Accessing a corrupted shared library 79 ELIBACC       Can not access a needed shared library 78 EREMCHG       Remote address changed 77 EBADFD        File descriptor in bad state 76 ENOTUNIQ      Name not unique on network 75 EOVERFLOW     Value too large for defined data type 74 EBADMSG      +Bad message 73 EDOTDOT       RFS specific error 72 EMULTIHOP     Multihop attempted 71 EPROTO        Protocol error 70 ECOMM         Communication error on send 69 ESRMNT        Srmount error 68 EADV          Advertise error 67 ENOLINK       Link has been severed 66 EREMOTE       Object is remote 65 ENOPKG        Package not installed 64 ENONET        Machine is not on the network 63 ENOSR         Out of streams resources 62 ETIME         Timer expired 61 ENODATA       No data available 60 ENOSTR        Device not a stream 59 EBFONT        Bad font file format 57 EBADSLT       Invalid slot 56 EBADRQC       Invalid request code 55 ENOANO        No anode 54 EXFULL        Exchange full 53 EBADR         Invalid request descriptor 52 EBADE         Invalid exchange 51 EL2HLT        Level 2 halted 50 ENOCSI        No CSI structure available 49 EUNATCH       Protocol driver not attached 48 ELNRNG        Link number out of range 47 EL3RST        Level 3 reset 46 EL3HLT        Level 3 halted 45 EL2NSYNC      Level 2 not synchronized 44 ECHRNG        Channel number out of range 43 EIDRM         Identifier removed 42 ENOMSG        No message of desired type 40 ELOOP         Too many levels of symbolic links 39 ENOTEMPTY    +Directory not empty 38 ENOSYS       +Function not implemented 37 ENOLCK       +No locks available 36 ENAMETOOLONG +File name too long 35 EDEADLK      +Resource deadlock avoided 34 ERANGE       +Numerical result out of range 33 EDOM         +Numerical argument out of domain 32 EPIPE        +Broken pipe 31 EMLINK       +Too many links 30 EROFS        +Read-only file system 29 ESPIPE       +Illegal seek 28 ENOSPC       +No space left on device 27 EFBIG        +File too large 26 ETXTBSY       Text file busy 25 ENOTTY       +Inappropriate ioctl for device 24 EMFILE       +Too many open files 23 ENFILE       +Too many open files in system 22 EINVAL       +Invalid argument 21 EISDIR       +Is a directory 20 ENOTDIR      +Not a directory 19 ENODEV       +No such device 18 EXDEV        +Invalid cross-device link 17 EEXIST       +File exists 16 EBUSY        +Device or resource busy 15 ENOTBLK       Block device required 14 EFAULT       +Bad address 13 EACCES       +Permission denied 12 ENOMEM       +Cannot allocate memory 11 EAGAIN       +Resource temporarily unavailable 10 ECHILD       +No child processes 9 EBADF        +Bad file descriptor 8 ENOEXEC      +Exec format error 7 E2BIG        +Argument list too long 6 ENXIO        +No such device or address 5 EIO          +Input/output error 4 EINTR        +Interrupted system call 3 ESRCH        +No such process 2 ENOENT       +No such file or directory 1 EPERM        +Operation not permitted #    0 --            Success 这么多errno的说明,调试程序就方便啦!


网站优化之系统瓶颈查找

网站优化之系统瓶颈查找 网站响应慢了,用户开始埋怨,老大安排你去优化,可是优化如何开始呢。 优化开始前一定要理清思路,问自己,网站的瓶颈在哪里。 系统的瓶颈在何方呢?如果你的系统有完善的监控分析系统的话,可以从统计数据和图形上 看到大致的系统瓶颈所在,但是如果你的系统没有这些数据,你又如何来确定系统的瓶颈呢。 按照一般的思路,我们对系统进行逻辑功能的划分,如静态服务器,动态服务器, 数据库服务器,业务逻辑服务器。分别针对对这些服务器的带宽、内存使用、cpu使用率、磁盘使用情况进行 分析,如对于动态服务器而言,其cpu的使用率一般情况下是其瓶颈;而对于静态文件服务器, 由于其逻辑简单,但需要传输大量的文件,其出口的带宽很有可能是其瓶颈;对于数据库服务器, cpu和磁盘都有可能是瓶颈。 我们可以通过如下几个方面来进行查找和排除: 1 网络带宽 带宽可能是最直接的一个瓶颈,可以很容易的估计到。 假如运营商给你提供了10M的带宽,注意带宽的单位是bit, 如果你的一个页面的大小是10K字节,那么一秒钟的最多的并发量这样计算: 10*1024/8/10=128 如果每秒并发超过这个数字,你的带宽就无法接受了。 或者通过netstat命令来观察一下你的网络收发包的情况,使用netstat -s来观察一些统计 的数据,如果发现等待包队列里总是有大量的包待处理,一方面说明可能你的程序有问题, 另一方面说明可能你的并发量太大,系统已经处理不过来了,可能已经开始丢包了。 按照这个两个思路去检查吧。 2 CPU 如果带宽不是问题,又有这么大的并发量,下一个很容易是问题的就是你的cpu了。 如果你的网站有大量的动态请求,如php操作数据库后再返回, cgi代码逻辑里有大量的排序等耗费cpu的操作,或者是你的cgi程序 写的不好,会死循环,这时你的cpu就将成为瓶颈。 在linux上试试top命令,看看你的机子的负载,通过最右上角的1分钟、5、15分钟采样的平均负载可以 看到你的机子在一段时间内的一个负载情况,如果过去15分钟你的机子的负载大于你的cpu的数目*5, 说明你的机子很繁忙了,很多进程都需要等待处理了。 或者vmstat -n 1命令,看看你的cpu idle的时间有多少,等待处理的进程数量有多少,磁盘块的读写有多少。 如果cpu idle的时间很少,或者等待处理的进程数量很多,说明你的系统比较繁忙。 3 磁盘操作 如果你的带宽很大,cpu比较的空闲,接下来的瓶颈很可能是磁盘的io操作了。 从内存读取数据是相当快的,但是从硬盘读取数据是内存读取数据的50到100倍的时间, 使用iostat -dx查看一下你的硬盘操作的情况,如果有大量的block阻塞着等待写入到硬盘, 你需要检查一下你的代码,看看是否有大量的日志操作,或者写文件的操作阻塞住了。 4 业务逻辑服务器响应慢 如果上述都ok,而且你的cgi又连接到其它的业务逻辑服务器请求数据的情况,你需要检查 你与业务逻辑服务器之间的连接是否正常,带宽是否够用,你的业务逻辑服务器的性能如何。 5 内存不够用 对于一些大容量缓存的业务服务器,如果缓存过多的内容,淘汰策略不好的话,会导致使用掉过多的内存, 从而引起操作系统进行大量的swap交换,进而影响到系统的性能,成为瓶颈。 通过ipcs -a观看系统的使用的共享内存的情况,如果共享内存使用太多的话,考虑较少一点共享内存的大小。 使用free来来观察系统的内存使用情况,如果发现空闲的内存空间少,使用top命令,然后ctl+M看看 那些进程占用了大量的内存,适当关掉一些进程,部署在其它的服务器上。