zoukankan      html  css  js  c++  java
  • Web服务器

    Web服务器那些招

    2012-11-26 20:07 by 轩脉刃, 557 阅读, 0 评论, 收藏编辑

    服务器每天日志处理

    使用服务器自带的/etc/logrotate

    配置文件:

    /etc/logrotate.d/nginx

    比如nginx:

    /usr/local/nginx/logs/access.log {

    rotate 3

    compress

    delaycompress

    daily

    dateext

    ifempty

    maxage 3

    sharedscripts

    postrotate

    /usr/bin/kill -USR1 `cat /var/run/nginx.pid`

    endscript

    }

    http://blog.csdn.net/iiisan/article/details/1180419

    注意这里的postrotate,发送一个USR1信号给nginx,这样nginx收到这个信号就会重新获取新的accesslog文件的句柄了。否则nginx持有的文件句柄有可能是错误的。

    nginx的fast-cgi param

    fastcgi_param RELEASE 1可以设置下

    来区分是开发环境还是线上环境

    代码中可以使用$_SERVER[‘RELEASE’]获取

    如何估计单机可承受的在线数量

    1 获取机器内存

    2 看每个php-fpm会占用多少内存,计算可以开多少个php-fpm

    3 看每个php进程会占用多少时间

    4 计算每秒一个php-fpm会处理多少请求

    5 可以计算出单个机器可以处理多少请求

    nginx的access_log

    nginx的access_log必须设置off才会停止

    如果什么都没有设置,它还是会记录access_log

    Linux内核升级

    2.6.32比以前的版本对系统的稳定和性能提升有指数级的优化。所以建议低版本都升级到这个版本以上

    xarg参数i

    问题:

    echo a|xarg echo b

    这样会返回b a

    要想返回a b就要这样设置

    echo a|xarg –i echo {} b

    xarg就会代替大括号

    suggest表现

    对于前端有suggest的功能

    千万不要监听onchange事件,当输入框输入一个键的时候就调用一次接口,这样对后端压力会很大。

    应该使用setTimeOut或者setIntval之类的方式,定期判断输入框是否有变化,然后再决定是否调用接口。

    nginx的worker_processes该怎么设置

    设置和cpu核数一样

    并且还需要设置nginx_worker_cpu_affinity

    这里有详细的文章参考:

    http://www.1990y.com/nginx-worker-process-affinity/comment-page-1/#comment-4973

    其中nginx_worker_cpu_affinity如果不设置的话就是让计算机自己判断,其实效率和一般的也没有什么大的区别

    Get请求的Url长度限制

    HTTP协议并没有限制url长度

    PHP没有限制url长度

    一般浏览器限制url长度为2000字节

    apache限制url为8000字节,在LimitRequestLine中设置

    nginx对header的限制为large_client_header_buffers

    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

    分类: Nginx

    mysql那些招

    2012-11-22 13:04 by 轩脉刃, 944 阅读, 5 评论, 收藏编辑

    show table status

    mysql官方文档在

    http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

    这里的rows行是表的行数,但是实际上是不准的。myisam是准的,其他的存储引擎是不准的。要准确的行数就需要使用count(*) 来获取了。

    mysql执行大批量删除

    执行大批量删除的时候注意要使用上limit

    因为如果不用limit,删除大量数据很有可能造成死锁

    如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库

    ps: 平时update和delete的时候最好也加上limit 1 来防止误操作

    optimize、Analyze、check、repair维护操作

    l optimize 数据在插入,更新,删除的时候难免一些数据迁移,分页,之后就出现一些碎片,久而久之碎片积累起来影响性能,这就需要DBA定期的优化数据库减少碎片,这就通过optimize命令。

    如对MyisAM表操作:optimize table 表名

    对于InnoDB表是不支持optimize操作,否则提示“Table does not support optimize, doing recreate + analyze instead”,当然也可以通过命令:alter table one type=innodb; 来替代。

    l Analyze 用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的执行计划不 同的时候,执行一次表分析可能有助于产生预期的执行计划。

    Analyze table 表名

    l Check检查表或者视图是否存在错误,对 MyISAM 和 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表进行表检查,也会同时更新关键字统计数据

    l Repair optimize需要有足够的硬盘空间,否则可能会破坏表,导致不能操作,那就要用上repair,注意INNODB不支持repair操作

    生成乱序的id

    方法:

    使用预设表

    比如id和toid的映射

    其中id是固定的,toid是随机的。

    然后在redis或memcache中记录一个指针值,指向id

    当要获取一个新toid的时候,取出指针值,加1,然后去预设表中获取toid

    查询和索引

    查询的时候必须要考虑到如何命中索引

    比如有几个小招:

    1 不要在索引列中使用表达式

    where mycol *2 < 4

    2 不要在like模式的开始位置使用通配符%

    where col_name like ‘%string%’

    不如

    where col_name like ‘string%’

    3 避免过多使用mysql自动转换类型,有可能无法用到index

    比如

    select * from mytbl where str_col=4

    但是str_col为字符串,这里其实就隐含了字符串变化

    应该使用

    select * from mytbl where str_col=’4’

    索引比表还大就不需要建立索引了吗

    索引是按照顺序排列的。所以即使索引比表大,也是可以加快查询速度的。

    当然如果索引比表还大首要的任务必须是检查下索引建立地是否有问题

    Char和varchar如何选择

    char是定长,varchar变长 
    varchar除了设置了数据之外,还多使用1两个字节定义了数据实际长度。

    char会在后面空余的行填充上空字符串

    myisam建议使用char。myisam中有个静态表的概念。使用char比使用varchar的查询效率高很多。

    innodb建议使用varchar。主要是从节省空间的方面考虑

    多个TimeStamp设置默认值

    一个表中至多只能有一个字段设置CURRENT_TIMESTAMP

    对于下面的需求:

    一个表中,有两个字段,createtime和updatetime。

    1 当insert的时候,sql两个字段都不设置,会设置为当前的时间

    2 当update的时候,sql中两个字段都不设置,updatetime会变更为当前的时间

    这样的需求是做不到的。因为你无法避免在两个字段上设置CURRENT_TIMESTAMP

    解决办法有几个:

    1 使用触发器。

    2 将第一个timestamp的default设置为0

    3 老老实实在sql语句中使用时间戳。

    http://www.cnblogs.com/yjf512/archive/2012/11/02/2751058.html

    查询数据表有多少行,多少容量

    不要使用select count(*)

    使用show table status like ‘table_name’  但是innodb的话会有50%左右的浮动,是个预估值

    AUTO_INCREMENT的设置

    1 不要设置为int,请设置为unsinged int,auto_increment的范围是根据类型来判定的

    2 auto_increment数据列必须要有索引,并且保证唯一性。

    3 auto_increment必须有NOT NULL属性

    4 auto_increment可以使用

    UPDATE table SET seq = LAST_INSERT_ID(seq -1)

    mysql的表示时间的字段用什么类型

    表示时间可以使用timestamp和datetime来使用

    datetime表示的时间可以从0000-00-00:00:00 到9999-12-31:00:00:00

    timestamp表示的时间为1970-01-01 08:00:01到            2038-01-19 11      :14:07

    timestamp占用的空间比datetime少,且可以设置时区等功能,所以能使用timestamp的地方尽量使用timestamp

    使用timestamp还可以设置

    [ON UPDATE CURRENT_TIMESTAMP]

    [DEFAULT CURRENT_TIMESTAMP]

    myisam和innodb支持外键

    myisam不支持外键,innodb支持;

    如果你使用创建外键的命令对myisam的表操作,操作不会返回失败,但是是没有外键关联建立起来的。

    对一个字段加减语句

    经常有需求对一个字段加减会使用

    update table set a = a+1

    这样是对的

    但是如果这样设置:

    select a from table

    取出数据后a为1

    update table set a =2

    这样会导致如果在select和update之间有其他事务操作修改这个字段的话,导致最后的设置可能出错。

    Creative Commons License

    本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系

    分类: 开源研究
  • 相关阅读:
    MFC中控制Tips的显示
    VC++6.0/MFC 自定义edit 限制输入内容 响应复制粘贴全选剪切的功能
    VC++6.0/MFC中如何限制Edit控件输入 例子,只能输入0和1
    Windows安装配置php+memcached的方法
    mrg_myIsam分表引擎用法
    用PHP做服务器接口客户端用http协议POST访问安全性一般怎么做
    PHP慢脚本日志和Mysql的慢查询日志(转)
    nginx 配置优化的几个参数
    static详解
    Redis命令总结
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2790179.html
Copyright © 2011-2022 走看看