導航:首頁 > 數據分析 > 避免資料庫出錯用什麼內存

避免資料庫出錯用什麼內存

發布時間:2023-07-08 06:13:41

『壹』 數據的存儲方法有哪些

什麼是分布式存儲

分布式存儲是一種數據存儲技術,它通過網路使用企業中每台機器上的磁碟空間,這些分散的存儲資源構成了虛擬存儲設備,數據分布存儲在企業的各個角落。

分布式存儲系統,可在多個獨立設備上分發數據。傳統的網路存儲系統使用集中存儲伺服器來存儲所有數據。存儲伺服器成為系統性能的瓶頸,也是可靠性和安全性的焦點,無法滿足大規模存儲應用的需求。分布式網路存儲系統採用可擴展的系統結構,使用多個存儲伺服器共享存儲負載,利用位置伺服器定位存儲信息,不僅提高了系統的可靠性,可用性和訪問效率,而且易於擴展。


分布式存儲的優勢

可擴展:分布式存儲系統可以擴展到數百甚至數千個這樣的集群大小,並且系統的整體性能可以線性增長。

低成本:分布式存儲系統的自動容錯和自動負載平衡允許在低成本伺服器上構建分布式存儲系統。此外,線性可擴展性還能夠增加和降低伺服器的成本,並實現分布式存儲系統的自動操作和維護。

高性能:無論是針對單個伺服器還是針對分布式存儲群集,分布式存儲系統都需要高性能。

易用性:分布式存儲系統需要提供方便易用的界面。此外,他們還需要擁有完整的監控和操作工具,並且可以輕松地與其他系統集成。

杉岩分布式統一存儲USP

利用分布式技術將標准x86伺服器的HDD、SSD等存儲介質抽象成資源池,對上層應用提供標準的塊、文件、對象訪問介面,

同時提供清晰直觀的統一管理界面,減少部署和運維成本,滿足高性能、高可靠、高可擴展性的大規模存儲資源池的建設需求。

『貳』 優化mysql 多大內存 centos6

一、mysql的優化思路
mysql的優化分為兩方面:
1. 伺服器使用前的優化
2. 服務使用中的優化
二、mysql的基礎優化步驟
1. 硬體級優化
(1). 最好mysql自己使用一台物理伺服器
(2). 內存和CPU方面,根據需求給予mysql伺服器足夠大的內存和足夠多的CPU核數
(3). 避免使用Swap交換分區–交換時從硬碟讀取的它的速度很慢,有的DBA安裝系統時就不裝swap分區
(4). 如果是mysql主庫,硬碟可以選用比較好的高速硬碟,系統用SSD固態硬碟,數據盤用sas替代sata硬碟,將操作系統和數據分區分開
(5). mysql產生的日誌與資料庫也放到不同的磁碟分區上面
(6). mysql資料庫硬碟格式化時,可以指定更小的硬碟塊
(7). 關於做RAID方面,主庫盡量做成RAID10,既提高了數據的讀寫速度也提到了數據的安全性
(8). 伺服器雙線雙電,保障伺服器運行穩定,不會因為突然斷電影響業務和損壞磁碟數據
2. mysql資料庫設計優化
(1). 根據需求選擇正確的存儲引擎,比如說讀的特別猛就用MySAM,如果對事務性要求高就用InnoDB
(2). 設置合理的欄位類型和欄位長度,比如說你這個欄位就20多個欄位你設置成VARCHAR(255)就是對磁碟空間的浪費
(3). 默認值盡可能的使用 NOT NULL,如果空值太多對mysql的查詢會有影響,尤其是在查詢語句編寫上面
(4). 盡量少的使用VARCHAR,TEXT,BLOB這三個欄位
(5). 添加適當索引(index) [四種: 普通索引、主鍵索引、唯一索引unique、全文索引]
(6). 不要濫用索引,大表索引,小表不索引
(7). 表的設計合理化(符合3NF)
3. mysql配置參數的優化
這里是mysql5.5版本的配置文件
vi my.cnf
[client]
port = 3306 #mysql客戶端連接時的默認埠
socket = /tmp/mysql.sock #與mysql伺服器本地通信所使用的socket文件路徑
default-character-set = utf8 #指定默認字元集為utf8
[mysql]
no-auto-rehash #auto-rehash是自動補全的意思,就像我們在linux命令行里輸入命令的時候,使用tab鍵的功能是一樣的,這里是默認的不自動補全
default-character-set = utf8 #指定默認字元集為utf8
[mysqld]
user = mysql
port = 3306
character-set-server = utf8 #設置伺服器端的字元編碼
socket = /tmp/mysql.sock
basedir = /application/mysql
datadir = /mysqldata
skip-locking #避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
open_files_limit = 10240 #MySQL打開的文件描述符限制,默認最小1024;當open_files_limit沒有被配置的時候,比較max_connections*5和ulimit -n的值,哪個大用哪個,當open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。
back_log = 500 #back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可 以被存在堆棧中。 如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。不同的操作系統在這個隊列大小上有它自 己的限制。 試圖設back_log高於你的操作系統的限制將是無效的。默認值為50。對於Linux系統推薦設置為小於512的整數。
max_connections = 800 #MySQL的最大連接數,如果伺服器的並發連接請求量比較大,建議調高此值,以增加並行連接數量,當然這建立在機器能支撐的情況下,因為如果連接數越多, 介於MySQL會為每個連接提供連接緩沖區,就會開銷越多的內存,所以要適當調整該值,不能盲目提高設值。可以過』conn%』通配符查看當前狀態的連接 數量,以定奪該值的大小。
max_connect_errors = 3000 #對於同一主機,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST。
table_cache = 614 #物理內存越大,設置就越大.默認為2402,調到512-1024最佳
external-locking = FALSE #使用–skip-external-locking MySQL選項以避免外部鎖定。該選項默認開啟
max_allowed_packet =8M #設置最大包,限制server接受的數據包大小,避免超長SQL的執行有問題 默認值為16M,當MySQL客戶端或mysqld伺服器收到大於max_allowed_packet位元組的信息包時,將發出「信息包過大」錯誤,並關閉連接。對於某些客戶端,如果通信信息包過大,在執行查詢期間,可能會遇「丟失與MySQL伺服器的連接」錯誤。默認值16M。
sort_buffer_size = 6M #用於表間關聯緩存的大小,查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每連接獨占,如果有100個連接,那麼實際分配的總共排序緩沖區大小為100 × 6 = 600MB。所以,對於內存在4GB左右的伺服器推薦設置為6-8M。
join_buffer_size = 6M #聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
thread_cache_size = 100 #伺服器線程緩存這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那麼客戶端的線程將被放到緩存中,如果線程重新被請求, 那麼請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那麼這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用
thread_concurrency = 8 #設置thread_concurrency的值的正確與否, 對mysql的性能影響很大, 在多個cpu(或多核)的情況下,錯誤設置了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那麼thread_concurrency的應該為4; 2個雙核的cpu, thread_concurrency的值應為8,屬重點優化參數
query_cache_size = 2M #指定MySQL查詢緩沖區的大小,在資料庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高並發,寫入量大的系統,建系把該功能禁掉。
query_cache_limit = 1M #默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成內存碎片和浪費
query_cache_min_res_unit = 2k #MySQL參數中query_cache_min_res_unit查詢緩存中的塊是以這個大小進行分配的,使用下面的公式計算查詢緩存的平均大小,根據計算結果設置這個變數,MySQL就會更有效地使用查詢緩存,緩存更多的查詢,減少內存的浪費。
default_table_type = InnoDB #默認表的引擎為InnoDB
thread_stack = 192K #限定用於每個資料庫線程的棧大小。默認設置足以滿足大多數應用transaction_isolation = READ-COMMITTED #設定默認的事務隔離級別.可用的級別如下:
READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE,1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重復讀4.SERIALIZABLE -串列
tmp_table_size = 246M #tmp_table_size 的默認大小是 32M。如果一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多高級 GROUP BY 查詢,增加 tmp_table_size 值。
max_heap_table_size = 246M #內存表,內存表不支持事務,內存表使用哈希散列索引把數據保存在內存中,因此具有極快的速度,適合緩存中小型資料庫,但是使用上受到一些限制
long_query_time = 1 #記錄時間超過1秒的查詢語句
log_long_format #
log-error = /logs/error.log #開啟mysql錯誤日誌,該選項指定mysqld保存錯誤日誌文件的位置
log-slow-queries = /logs/slow.log #慢查詢日誌文件路徑
pid-file = /pids/mysql.pid
log-bin = /binlog/mysql-bin #binlog日誌位置以及binlog的名稱
relay-log = /relaylog/relay-bin #relaylog日誌位置以名稱
binlog_cache_size = 1M #binlog_cache_size 就是滿足兩點的:一個事務,在沒有提交(uncommitted)的時候,產生的日誌,記錄到Cache中;等到事務提交(committed)需要提交的時候,則把日誌持久化到磁碟,默認是32K。
max_binlog_cache_size = 32M #binlog緩存最大使用的內存
max_binlog_size = 2M #一個binlog日誌的大小
expire_logs_days = 7 #保留7天的binlog
key_buffer_size = 124M #索引緩存大小: 它決定了資料庫索引處理的速度,尤其是索引讀的速度
read_buffer_size = 16M #MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。read_buffer_size變數控制這一緩沖區的大小。如果對表的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及內存緩沖區大小提高其性能
read_rnd_buffer_size = 2M #MySQL的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySQL會首先掃描一遍該緩沖,以避免磁碟搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大
bulk_insert_buffer_size = 1M #批量插入數據緩存大小,可以有效提高插入效率,默認為8M
myisam_sort_buffer_size = 1M #MyISAM表發生變化時重新排序所需的緩沖
myisam_max_sort_file_size = 10G #MySQL重建索引時所允許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE). 如果文件大小比此值更大,索引會通過鍵值緩沖創建(更慢)
myisam_repair_threads = 1 #如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個線程去修復他們.這對於擁有多個CPU以及大量內存情況的用戶,是一個很好的選擇.
myisam_recover #自動檢查和修復沒有適當關閉的 MyISAM 表
lower_case_table_names = 1 #讓mysql不區分大小寫
skip-name-resolve #禁用DNS解析,連接速度會快很多。不過,這樣的話就不能在MySQL的授權表中使用主機名了而只能用ip格式。
#slave-skip-errors = 1032,1062 #這是選填項讓slave庫跳過哪些錯誤繼續同步
#replicate-ignore-db=mysql #選填,同步時候哪個資料庫不同步設置
server-id = 1
innodb_additional_mem_pool_size = 4M #InnoDB 存儲的數據目錄信息和其它內部數據結構的內存池大小。應用程序里的表越多,你需要在這里分配越多的內存,默認是2M
innodb_buffer_pool_size = 2048M #這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默 認的 key_buffer_size 設置下運行的可以,然而Innodb在默認的 設置下卻跟蝸牛似的。由於Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達 70-80% 的可用內存。一些應用於 key_buffer 的規則有 — 如果你的數據量不大,並且不會暴增,那麼無需把 innodb_buffer_pool_size 設置的太大了
innodb_file_io_threads = 4 #文件IO的線程數,一般為 4
innodb_thread_concurrency = 8 #你的伺服器CPU有幾個就設置為幾,建議用默認一般為8
innodb_flush_log_at_trx_commit = 2 #默認為1,如果將此參數設置為1,將在每次提交事務後將日誌寫入磁碟。為提供性能,可以設置為0或2,但要承擔在發生故障時丟失數據的風險。設置為0表示事務日誌寫入日誌文件,而日誌文件每秒刷新到磁碟一次。設置為2表示事務日誌將在提交時寫入日誌,但日誌文件每次刷新到磁碟一次。
innodb_log_buffer_size = 2M #此參數確定些日誌文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據.MySQL開發人員建議設置為1-8M之間
innodb_log_file_size = 4M #此參數確定數據日誌文件的大小,以M為單位,更大的設置可以提高性能,但也會增加恢復故障資料庫所需的時間
innodb_log_files_in_group = 3 #為提高性能,MySQL可以以循環方式將日誌文件寫到多個文件。推薦設置為3M
innodb_max_dirty_pages_pct = 90 #Buffer_Pool中Dirty_Page所佔的數量,直接影響InnoDB的關閉時間。參數 innodb_max_dirty_pages_pct可以直接控制了Dirty_Page在Buffer_Pool中所佔的比率,而且幸運的是 innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先調小,強制數據塊Flush一段時間,則能夠大大縮短MySQL關閉的時間。
innodb_lock_wait_timeout = 120 #InnoDB 有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死鎖。為消除這種可能性,可以將innodb_lock_wait_timeout設置為一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)
innodb_file_per_table = 0 #獨享表空間(關閉)
[mysqlmp]
quick
max_allowed_packet = 16M
4. 架構優化
(1). 前端用memcached,redis等緩存分擔資料庫壓力
(2). 資料庫讀寫分離,負載均衡
(3). 資料庫分庫分表
(4). 存儲可採取分布式
5. 後期優化
主要是多觀察,後期就是維護工作了,觀察伺服器負載是需要添加硬體了,還是有語句有問題啊,還是參數要修改了。
6. 查詢優化(摘抄別人的)
63. 使用慢查詢日誌去發現慢查詢。
64. 使用執行計劃去判斷查詢是否正常運行。
65. 總是去測試你的查詢看看是否他們運行在最佳狀態下 –久而久之性能總會變化。
66. 避免在整個表上使用count(*),它可能鎖住整張表。
67. 使查詢保持一致以便後續相似的查詢可以使用查詢緩存。
68. 在適當的情形下使用GROUP BY而不是DISTINCT。
69. 在WHERE, GROUP BY和ORDER BY子句中使用有索引的列。
70. 保持索引簡單,不在多個索引中包含同一個列。
71. 有時候MySQL會使用錯誤的索引,對於這種情況使用USE INDEX。
72. 檢查使用SQL_MODE=STRICT的問題。
73. 對於記錄數小於5的索引欄位,在UNION的時候使用LIMIT不是是用OR.
74. 為了 避免在更新前SELECT,使用INSERT ON DUPLICATE KEY或者INSERT IGNORE ,不要用UPDATE去實現。
75. 不要使用 MAX,使用索引欄位和ORDER BY子句。
76. 避免使用ORDER BY RAND().
77。LIMIT M,N實際上可以減緩查詢在某些情況下,有節制地使用。
78。在WHERE子句中使用UNION代替子查詢。
79。對於UPDATES(更新),使用 SHARE MODE(共享模式),以防止獨占鎖。
80。在重新啟動的MySQL,記得來溫暖你的資料庫,以確保您的數據在內存和查詢速度快。
81。使用DROP TABLE,CREATE TABLE DELETE FROM從表中刪除所有數據。
82。最小化的數據在查詢你需要的數據,使用*消耗大量的時間。
83。考慮持久連接,而不是多個連接,以減少開銷。
84。基準查詢,包括使用伺服器上的負載,有時一個簡單的查詢可以影響其他查詢。
85。當負載增加您的伺服器上,使用SHOW PROCESSLIST查看慢的和有問題的查詢。
86。在開發環境中產生的鏡像數據中 測試的所有可疑的查詢。

『叄』 資料庫伺服器運行需要佔用的內存

如果資料庫所佔的內存太大的話,相應的伺服器中剩餘的資源就會減少,過少...資料庫佔用的最大內存需要根據自己來判斷。

閱讀全文

與避免資料庫出錯用什麼內存相關的資料

熱點內容
proteus中如何單片機編程 瀏覽:26
excel打開如何顯示文件名稱 瀏覽:400
為什麼手機上不能打開excel文件 瀏覽:688
libsvmmatlab代碼 瀏覽:332
前端顯示文件流的圖片 瀏覽:20
蘇州哪裡可以學機械編程 瀏覽:974
加固數據線怎麼修 瀏覽:342
鏡像文件游戲怎麼安裝 瀏覽:388
java構建函數 瀏覽:257
excel文件房屋信息 瀏覽:629
迷你編程更新為什麼領不了皮膚 瀏覽:503
微信公共賬號登錄入口 瀏覽:820
蝴蝶錢包app 瀏覽:681
聯通查詢賬號密碼修改 瀏覽:774
文件頭線到上紙邊距離是多少 瀏覽:36
蘋果手機怎樣備份文件在哪裡 瀏覽:425
zemax在哪裡編程ZPL 瀏覽:563
如何撤銷word空白頁 瀏覽:296
什麼叫網路連接超時 瀏覽:49
京東熱點代碼 瀏覽:484

友情鏈接