MySQL監控常用語法

1 mysql連線數

一、取得mysql最大連線數

show status like ‘Max_used_connections’

二、取得mysql目前開啟的連線數

show status like ‘Threads_connected’

2 mysql 暫存

show status like ‘Innodb_buffer_pool_reads’

show status like ‘Innodb_buffer_pool_read_requests’

show status like ‘Innodb_buffer_pool_pages_total’

show status like ‘Innodb_buffer_pool_pages_free’

(1-Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100%

((Innodb_buffer_pool_pages_total-Innodb_buffer_pool_pages_free)/Innodb_buffer_pool_pages_total)*100%

3 鎖

show status like ‘Innodb_row_lock_waits’

show status like ‘Innodb_row_lock_time_avg’

show open TABLES where in_use>0;

4 sql語法

一、慢查詢mysql 語法開關是否打開

show variables like ‘slow_query_log’;

二、慢查詢mysql語法打開

set global slow_query_log=1

三、設定慢sql的時間(秒)

set long_query_time=1

三、慢sql路徑

show variables like ‘slow_query_log_file’;

四、透過慢sql分析工具格式化記錄

mysqldumpslow -s at -t 10 /export/data/mysql/log/slow.log

四.1、取出使用最多的10條慢sql

./mysqldumpslow -s c -t 10 /export/data/mysql/log/slow.log

四.2、取出查詢時間最慢的3條sql

./mysqldumpslow -s t -t 3 /export/data/mysql/log/slow.log

幾個會導致sql變慢的原因

1 子查詢

SELECT FROM t1 WHERE id (SELECT id FROM t2 WHERE name=’hechunyang’);

改用 join ,但update/delete沒作用

2 避免用函數

SELECT FROM t WHERE YEAR(d) >= 2016;

改用 SELECT FROM t WHERE d >= ‘2016-01-01’;

3 用in 取代 or

SELECT FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

改用  SELECT FROM t WHERE LOC_IN IN (10,20,30);

4 雙%號無法用到索引

SELECT FROM t WHERE name LIKE ‘%de%’;

改為 SELECT FROM t WHERE name LIKE ‘de%’;

5 分組統計可以禁止排序

SELECT goods_id,count() FROM t GROUP BY goods_id;

改為  SELECT goods_id,count () FROM t GROUP BY goods_id ORDER BY NULL;

6不要用無意義的order by

SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

改為

SELECT count (1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;

 

Delphi 仿DBNavigator方式

Delphi有很好用的DBNavitor元件,美中不足的是按鈕的樣式稍嫌不足!那是否可以仿DBNavigator的方式?
筆者提供一個簡單的範例給大家 🙂
delphi_simulate_dbnavigator
一、自訂首筆/上筆/下筆/末筆
[pascal]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
BtnFirst.Enabled := not Datasource1.DataSet.Bof;
BtnPrior.Enabled := not Datasource1.DataSet.Bof;
BtnNext.Enabled := not Datasource1.DataSet.eof;
BtnLast.Enabled := not Datasource1.DataSet.eof;
if TDataSource(Sender).State in [dsEdit,dsInsert] then begin
BtnFirst.Enabled := False;
BtnPrior.Enabled := False;
BtnNext.Enabled := False;
BtnLast.Enabled := False;
end;
end;
[/pascal]
二、自訂新增/修改/刪除/取消/存檔
[pascal]
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
BtnAdd.Enabled := TDataSource(Sender).State in [dsbrowse];
BtnEdit.Enabled := TDataSource(Sender).State in [dsbrowse];
BtnDelete.Enabled := TDataSource(Sender).State in [dsBrowse];
BtnAbort.Enabled := TDataSource(Sender).State in [dsEdit,dsInsert];
BtnSave.Enabled := TDataSource(Sender).State in [dsEdit,dsInsert];
end;
[/pascal]
三、讓button按下後與DBNavigator一樣
[pascal]
procedure TForm1.BtnAbortClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbcancel);
end;

procedure TForm1.BtnAddClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbinsert);
end;

procedure TForm1.BtnDeleteClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbdelete);
end;

procedure TForm1.BtnEditClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbedit);
end;

procedure TForm1.BtnFirstClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbfirst);
end;

procedure TForm1.BtnLastClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nblast);
end;

procedure TForm1.BtnNextClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbnext);
end;

procedure TForm1.BtnPriorClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbprior);
end;

procedure TForm1.BtnSaveClick(Sender: TObject);
begin
dbnavigator1.BtnClick(nbpost);
end;
[/pascal]

Delphi Infopower expendbutton運用

1. wwDBGrid1的 control type設為CustomEdit、Control Name為 wwExpendButton
2. wwExpendButton的 AutoHideExpend設True、DataSource與DataField設為wwDBGrid1顯示的內容、Grid設為wwDBGrid2、ShowAsButton與ShowText設為True
3. wwDBGrid2連結正確

Delphi BDE逐漸走入歷史

Delphi XE7版本release之後,發現一直跟隨Delphi很久的BDE(Borland Database Engine)並沒有隨著版本發佈。
而是需要註冊使用者才能自行下載,BDE是Borland在16位元環境下一直叱吒資料庫開發界的利器,不過隨著Embarcadero將Delphi推至行動開發,更不斷精進新版本的dbExpress以及FireDAC技術。
看來應該是Embarcadero準備放手BDE的時候了!

相關連結:
ID: 29997, BDE Installer for RAD Studio, Delphi, C++Builder XE7
http://cc.embarcadero.com/item/29997

Delphi透過MySQL存入檔案備份

MySQL存Blog的大小
TINYBLOB – 255 bytes
BLOB – 65535 bytes
MEDIUMBLOB – 16,777,215 bytes (2^24 – 1)
LONGBLOB – 4G bytes (2^32 – 1)

透過資料庫存取的方式重點:

TBlobField – LoadFromStream、SaveToStream
Tmemorystream – LoadFromFile、SaveToFile(.Position :=0)

存入資料庫

[pascal]
var
astream : Tmemorystream;
begin
AStream := TMemoryStream.Create;
try
astream.LoadFromFile(filename);
AStream.Position := 0;
if adotable1.Active then
begin
adotable1.Edit;
TBlobField(adotable1.FieldByName(‘t2’)).LoadFromStream(AStream);
adotable1.Post;
end;
finally
AStream.free;
end;
end;
[/pascal]

存回檔案

[pascal]
var
Ms:Tmemorystream;
begin
Ms := Tmemorystream.Create;
try
if adotable1.Active then
begin
TBlobField(adotable1.FieldByName(‘t2’)).SaveToStream(Ms);
Ms.Position := 0;
MS.SaveToFile(sname);
end;
finally
ms.Free;
end;
end;
[/pascal]

MySQL預設的BLOB為1M
別忘了 My.ini調整
max_allowed_packet = XXM

[Delphi] DBGrid顯示不同字型、顏色

dbgrid選擇顏色字型的方式
1.在DBGrid的Columns Editor中,將要出現按鈕的欄位的ButtonStyle設為cbsEllipsis
2.接著到OnEditButtonClick中增加程式判斷
if dbgrid1.SelectedField = xxxx(欄位名稱) then begin
end;
3.顯示的方式則是在OnDrawColumnCell中增加程式
IF COLUMN.FieldName = ‘xxxx(欄位名稱)’ THEN BEGIN
DBGrid1.canvas.brush.Color := STRINGTOCOLOR(‘clGreen’);
END;
// 記得要加上
DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, []);

Delphi-將POS系統的Interbase匯到MySQL資料庫

前一陣子研究各家的餐飲、簡餐POS系統,意外的發現不少系統都是用Delphi寫的,資料庫也大多使用Interbase或是Firebird。

為了方便研究,就嘗試將資料庫轉到MySQL上去~記錄一下轉移方式。

工具:

做法:

在MySQL建立空白資料庫(utf8)

4

 

資料來源 (ODBC)新增 MySQL ODBC 3.51 Driver,注意一點要記得打開Details,將 Character Set 選成 Big5(不是utf8喔)

5

SQL Explorer→New Database→Database Driver Name選INTRBASE,SERVER NAME選擇您要連結的GDB檔案

8

6

7

打開Datapump,Source Alias選擇在SQL Explorer建立的名稱,User Name是SYSDBA(注意大小寫),password是 masterkey(注意大小寫)。接著Target Alias選擇MySQL ODBC建立的名稱。

11

10

9

12

13

 

 

 

14