我們有像下表計劃返回的最後一行與:的Mysql Innodb的不上選擇與遞減順序
"select user_id from offers where campaign_id='".$campaign['id']."' order by id desc limit 1"
如果user_id相同,我們會阻止新的報價來保護用戶免於意外的雙擊。
如果沒有與報價,我們用插入任何報價問題:
"insert into offers(campaign_id,user_id,price,ip,cdate) values (".$campaign['id'].",".$user['id'].",'".$price."','".$_SERVER['REMOTE_ADDR']."',".time().")"
但問題是選擇只有約1秒後返回最後插入的行。這意味着如果用戶點擊按鈕的速度過快,用戶可以插入多個優惠。
我們使用5.5.30-30.2日誌的Percona Server作爲我們的數據庫服務器。 以下是我們的my.cnf文件:
[mysqld]
datadir = /var/lib/mysql
tmpdir = /var/lib/mysqltmp
socket = /var/lib/mysql/mysql.sock
skip-external-locking = 1
skip-name-resolve
open-files-limit = 40000
max_heap_table_size = 64M
tmp_table_size = 64M
log-error = /var/log/mysqld.log
thread-cache-size = 50
table-cache = 4096
table-open-cache = 4096
table-definition-cache = 512
query-cache-size = 0
query-cache-limit = 16M
query-cache-type = 0
sort-buffer-size = 1M
read-buffer-size = 1M
read-rnd-buffer-size = 8M
join-buffer-size = 1M
tmp-table-size = 64M
max-heap-table-size = 64M
back-log = 100
max-connections = 10000
max-connect-errors = 10000
max-allowed-packet = 256M
interactive-timeout = 360
wait-timeout = 360
innodb = FORCE
key-buffer-size = 32M
myisam-sort-buffer-size = 4M
innodb-buffer-pool-size = 60G
innodb-log-file-size = 256M
innodb_log_files_in_group = 2
innodb-log-buffer-size = 4M
innodb-file-per-table = 1
innodb-thread-concurrency = 8
innodb-flush-log-at-trx-commit =2
server-id = 1
slow-query-log = 1
slow-query-log-file = /var/lib/mysqllogs/slow-log
query_cache_type已經是0,因爲我從my.cnf複製了 – intacto 2013-05-03 13:42:36
也更新了表中的query_cache – intacto 2013-05-03 13:43:11
我的不好,抱歉。在我讀過cnf時錯過了。 – fullybaked 2013-05-03 13:43:19