ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中
作者:
李祥敬
2010-03-04/17:57
Ubuntu mysql對于電腦使用的玩家的常用軟件,然后我就學習及深入的研究Ubuntu mysql,在這里和大家一起探討Ubuntu mysql的使用方法,希望對大家有用。
1、如果Ubuntu mysql的data數據很少,內存足夠大,可以把data防止到內存盤中。linux如下設置內存盤:mount -t ramfs none /ram默認使用內存一半如果內存不夠大,系統有多個硬盤,則把Ubuntu mysql應用程序和data目錄分開到不同硬盤上。
2、Ubuntu mysql的表設置為myiasm,比同等條件下的innodb能快20倍以上
3、導入完成以后才創建數據庫索引
4、導入完成以后根據需要轉換為其他engine,比如innodb
5、多條數據插入一個表,可以使用多記錄方式:insert into tablename values('xxx','xxx'),('yyy','yyy')...;
6、如果多個Ubuntu mysql執行導入,可以使用delayedinsert delayed into tablename values('sss','ssss');
7、大文件sql文件可以用split分成多份再導
8、同等條件下,redhat比ubuntu強很多(幾乎肯定)
9 性能調整技巧(Performance tuning tips)
1. 如果 Unix top 或 Windows 任務管理器(Task Manager) 顯示服務的 CPU 占用率小于 70%,(shows that the CPU usage percentage with your workload is less than 70 %,)你的系統瓶頸可能在磁盤讀寫上?;蛟S你提交了大量的事務,或者是緩沖池(buffer pool)太小了。將緩沖池設大點會有所幫助,但一定要注意不能大于物理內存的 80%。
2. 在一個事務中包含幾個修改。如果事務對數據庫進行了修改,那么在這個事務提交時 InnoDB 必須刷新日志到磁盤上。因為硬盤的旋轉速度通常至多為 167 轉/秒,那么只要磁盤不欺騙操作系統,提交的事務數目限止也同樣為 167 次/秒·用戶。
3. 如果掉失最近的幾個事務無所謂的話,可以在 my.cnf 文件中將參數 innodb_flush_log_at_trx_commit 設置為 0。InnoDB 無論如何總是嘗試一秒刷新(flush)一次日志,盡管刷新并不能得到保證。
4. 將日志文件(log files)設大一點,使日志文件的總和正好與緩沖池(buffer pool)一樣大。當 InnoDB 用光日志文件的空間時,它不得不在一個時間點上將緩沖池內修改過的內容寫到磁盤上。 小的日志文件可能引起不必要的磁盤寫操作。但是大的日志文件的缺點就是在數據恢復時將占用較長的時間。
5. 同樣 log buffer 盡量設大點,比如說 8 MB。
6. 如果要存儲變長的字符串或字段可能會包含大量的 NULLs,請使用 VARCHAR 型字段代替 CHAR 。一個 CHAR(n) 字段總是使用 n bytes 來存儲數據,即使這個字符串很短或是一個 NULL 值。較小的表更加適合緩沖池同時能夠減少磁盤 I/O 。
7. (適合從 3.23.41 以上版本) 在某些版本的 Linux 和 Unixes 中,使用 Unix fsync 或其它類似的方法將文件刷新到磁盤是異常地慢的。InnoDB 默認的方法就是 fsync 。如果你對數據庫系統的磁盤寫性能不能感到滿意,你可以嘗試在 my.cnf 中將 innodb_flush_method 設置為 O_DSYNC,盡管 O_DSYNC 選項在多數的系統上看起來比較慢。
8. 在向 InnoDB 導入數據時,請確認 Ubuntu mysql 沒有打開 autocommit=1 。否則每個插入語句都要將 log 刷新到磁盤。在你的 SQL 導入文件的第一行加入
set autocommit=0;并在最后一行加入commit;如果使用 Ubuntu mysqldump 選項 --opt,你將會得到一個快速導入 InnoDB 表的轉儲(dump)文件,甚至可以不再使用上面所提的 set autocommit=0; ... commit; 。
9. 小心 insert 集全的大回滾(roolback):在插入時 InnoDB 使用插入緩沖來減少磁盤 I/O,但在相應的回滾中卻沒有使用這樣的機制。一個 disk-bound rollback 可能會花費相應插入時間的 30 倍。如果發生一個失控的回滾,你可以查看第 6.1 章節的技巧來停止它。
10. 同樣也要小心一個大的 disk-bound 的操作。使用 Drop TABLE 或 TRUNCATE (從 Ubuntu mysql-4.0 以上) 來清空一個表,而不要使用 Delete FROM yourtable。
11. 如果需要插入大量記錄行可以使用多行(multi-line)的 Insert 來減少客戶端與服務器端的通信開銷:Insert INTO yourtable VALUES (1, 2), (5, 5);這個技巧對插入任何表均有效,而不僅僅是 InnoDB。
12. 如果在輔鍵上有 UNIQUE 約束,從 3.23.52 和 4.0.3 開始,可以通過在一個導入會話中將唯一鍵檢查(uniqueness check)關閉來提高數據導入速度:SET UNIQUE_CHECKS=0;一個大的表導入這將減少大量的磁盤 I/O,因為這時 InnoDB 可能使用自身的插入緩沖來分批地記錄輔助索引。
13. 如果在表中有一個子 FOREIGN KEY 約束,從 3.23.52 和 4.0.3 開始,可以通過在一個導入會話中將外鍵檢查(foreign key check)關閉來提高數據導入速度:SET FOREIGN_KEY_CHECKS=0;對一個大的表導入這將減少大量的磁盤 I/O。
9.1 InnoDB 監視器(Monitors)從版本 3.23.42 開始,InnoDB 中就包含了 InnoDB Monitors,它可以顯示出 InnoDB 的內部狀態。從版本 3.23.52 和 4.0.3 開始,你可以使用一個新的 SQL 命令SHOW INNODB STATUS來讀取標準 InnoDB Monitor 給 SQL client 的輸出信息。這些信息對性能調整有益。
另外一個使用 InnoDB Monitors 方法就是讓它在服務程序 Ubuntu mysqld 的標準輸出上持續地寫出信息。當開關打開時,InnoDB Monitors 大約每 15 秒顯示一次數據(注意:Ubuntu mysql 的客戶端并不會顯示任何東西)。
一個簡單地使用它的方法就是以一個命令行方式執行 Ubuntu mysqld 。否則輸出將會定向到 Ubuntu mysql 服務錯誤日志(error log file)中 'yourhostname'.err (在 Windows 下為 Ubuntu mysql.err),在 Windows 系統中必須在 MS-DOS 使用提示符下以 --console 選項運行 Ubuntu mysqld-max 來指令信息輸出在命令提示符窗口上。
顯示的信息包含下列信息:
* 每一個活動的事務(active transaction)保持的表和記錄鎖定
* 事務的鎖等待 (lock waits of a transactions)
* 線程的信號量等待 (semaphore waits of threads)
* 文件 I/O 的等待請求 (pending file i/o requests)
* 緩沖池(buffer pool)的統計信息
* InnoDB 主線程的 purge buffer 和 insert buffer 歸并活動(merge activity)
通過下列的 SQL 命令,可以使標準的 InnoDB Monitor 記錄到標準的 Ubuntu mysqld 的輸出上:Create TABLE innodb_monitor(a int) type = innodb;通過它來停止:Drop TABLE innodb_monitor;
Create TABLE 句法只不過是為了通過 Ubuntu mysql SQL 語法分析而提供給 InnoDB 引擎命令的一種方式:那個被創建的表根本與 InnoDB Monitor 無任何關系。如果你在監視器運行著的狀態下關閉數據庫,并且你需要再次啟動監視器, 那么你不得不在發出一個新的 Create TABLE 來啟動監視器之前先移除(drop)這個表。
與之相類似的,你可以啟動 innodb_lock_monitor ,它在某些方面與 innodb_monitor 一致,但是它會顯示更多的鎖定信息。一個單獨的 innodb_tablespace_monitor 將顯示在現有表空間內所建立的文件段列表以及可以分配數據結構的有效表空間。從 3.23.44 開始,提供了 innodb_table_monitor ,通過它可以獲得 InnoDB 內部數據字典的信息。
總結
以上是生活随笔為你收集整理的ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 易用性的定义
- 下一篇: 上交大计算机复试机师难不难,本科复旦,考