ca88手机版登录:带参数处理方式,简单解决mys

  下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式:

前几天,在管理系统的时候遇到一个奇怪的问题, 今天才有机会安装好MySQL环境来重现此问题,由于不是最原始的环境, 所以未必能够完全重现, 我只能努力重现关键问题了.. 我觉得此问题有点特别, 故在此大概的回想下当时的情景..

    在 linux 下,经常出现的情况就是使用 VBB 这种论坛系统时,出现缓慢,mysql 假死状态,sleep进程过多等等现像。导致几十个用户,就把系统搞定了。
    其实这是 mysql 配置上的问题, 默认的 linux 中, mysql 的配置是 my-large.cnf 配置,该配置适合大型服务器。有高内存,比如2G,4G内存的,适合使用,而一般512M内存 的就不行了。它会占用512M内存来保存系统 mysql 的进程,这些进程长期堆质,并不释放,导致系统缓慢。所以,把配置改变成为 my-small.cnf ,小型配置就可以了。它的配置如下:
    # Example mysql config file for small systems.
    #
    # This is for a system with little memory (<= 64M) where MySQL is only used
    # from time to time and its important that the mysqld deamon
    # doesnt use much resources.
    #
    # You can copy this file to
    # /etc/my.cnf to set global options,
    # mysql-data-dir/my.cnf to set server-specific options (in this
    # installation this directory is /var/lib/mysql) or
    # ~/.my.cnf to set user-specific options.
    #
    # One can in this file use all long options that the program supports.
    # If you want to know which options a program support, run the program
    # with --help option.
    # The following options will be passed to all MySQL clients
    [client]
    #password = 你的密码
    port = 3306
    socket = /tmp/mysql.sock
    # Here follows entries for some specific programs
    # The MySQL server
    [mysqld]
    port = 3306
    socket = /tmp/mysql.sock
    skip-locking
    set-variable = key_buffer=16K
    set-variable = max_allowed_packet=1M
    set-variable = thread_stack=64K
    set-variable = table_cache=4
    set-variable = sort_buffer=64K
    set-variable = net_buffer_length=2K
    server-id = 1
    # Uncomment the following if you want to log updates
    #log-bin
    # Uncomment the following if you are NOT using BDB tables
    #skip-bdb
    # Uncomment the following if you are using InnoDB tables
    #innodb_data_home_dir = /var/lib/mysql/
    #innodb_data_file_path = ibdata1:10M:autoextend
    #innodb_log_group_home_dir = /var/lib/mysql/
    #innodb_log_arch_dir = /var/lib/mysql/
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    #set-variable = innodb_buffer_pool_size=16M
    #set-variable = innodb_additional_mem_pool_size=2M
    # Set .._log_file_size to 25 % of buffer pool size
    #set-variable = innodb_log_file_size=5M
    #set-variable = innodb_log_buffer_size=8M
    #innodb_flush_log_at_trx_commit=1
    #set-variable = innodb_lock_wait_timeout=50
    [mysqldump]
    quick
    set-variable = max_allowed_packet=16M
    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates
    [isamchk]
    set-variable = key_buffer=8M
    set-variable = sort_buffer=8M
    [myisamchk]
    set-variable = key_buffer=8M
    set-variable = sort_buffer=8M
    [mysqlhotcopy]
    interactive-timeout
    以上配置足够 你的系统高速运行 mysql 了,sleep的进程,很快就被回收,不占资源,这非常适合小型服务器。一般个人托管的服务器也很适合。

  call GetUsersDynamic(age<=30,);

工作时, 执行了一个su – mysql 的命令, 遇到了下面这样一个错误..

linux 下,经常出现的情况就是使用 VBB 这种论坛系统时,出现缓慢,mysql 假死状态,sleep进程过多等等现像。导致几十个用户,就把系统...

 

view sourceprint?1 [[email protected] ~]# su - mysql 

/********动态查询用户的信息********/    CREATE PROCEDURE GetUsersDynamic(WhereCondition varchar(500),OrderByExpress varchar(100))    begin    declare stmt varchar(2000);    if LENGTH(OrderbyExpress)>0 then    begin         set @sqlstr=concat(select id,name,password,age,getdate(adddate) as AddDate from users where ,WhereCondition, order by ,OrderByExpress);    end;    else    begin         set @sqlstr=concat(select id,name,password,age,getdate(adddate) as AddDate from users where ,WhereCondition);    end;    end if;    prepare stmt from @sqlstr;    execute stmt;    end;   

2 su: cannot set user id: Resource temporarily unavailable

  getdate()是一个自定义的函数,作用是返回日期的短格式

这是一个Shell中由于资源不足引起的问题, 当时下意识的先运行ulimit,看看ulimit的基本限制.

 

view sourceprint?01 [[email protected] ~]# ulimit -a 

CREATE DEFINER=`root`@`localhost` FUNCTION `getdate`($date datetime) RETURNS varchar(50) CHARSET latin1    return date_format($date,%Y-%m-%d);  

02 core file size          (blocks, -c) 0 

  动态插入数据的MySql存储过程,(注意四个单引号表示一个一引号):

03 data seg size           (kbytes, -d) unlimited 

 

04 scheduling priority             (-e) 0 

CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertUser`(in name2 varchar(50),in password2 varchar(32),in age2 int,in adddate2 datetime)    begin    DECLARE stmt varchar(2000);    set @sqlstr=concat(insert into users(name,password,age,adddate) values();    set @sqlstr=concat(@sqlstr,,name2,,,,,password2,,,,age2,,,,adddate2,,));    prepare stmt from @sqlstr;    execute stmt;    end;  

05 file size               (blocks, -f) unlimited 

 

06 pending signals                 (-i) 25600 

...

07 max locked memory       (kbytes, -l) 32 

08 max memory size         (kbytes, -m) unlimited 

09 open files                      (-n) 1024 

10 pipe size            (512 bytes, -p) 8 

11 POSIX message queues     (bytes, -q) 819200 

12 real-time priority              (-r) 0 

13 stack size              (kbytes, -s) 10240 

本文由ca88手机版登录发布于亚洲城ca88手机版官网,转载请注明出处:ca88手机版登录:带参数处理方式,简单解决mys

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。