MATHANGSPK BLOG

Chia sẽ các thủ thuật về máy tính, tin học, các kiến thức điện tử cơ bản

Thứ Năm, 30 tháng 11, 2017

Index là phương tiện rất mạnh để tăng hiệu năng thực hiện của câu lệnh. Bài post này sẽ cung cấp một ví dụ cho bạn thấy bên trong SQL Server sử dụng index để  tăng hiệu năng như thế nào. Ở đây tôi dùng database AdventureWork là database mẫu đi kèm với SQL Server (bạn có thể dowload database này về và cài vào nếu chưa có sẵn).
Trước hết ta hãy dùng bảng Sale.Customer để tạo ra hai bảng mới là Sale.Customer_noIndex và Sale.Customer_Index, đồng thời tạo 1 index trên trường CustomerID cho bảng Sale.Customer_Index:
SELECT *
INTO Sales.Customer_NoIndex
FROM Sales.Customer
 
SELECT *
INTO Sales.Customer_Index
FROM Sales.Customer
GO
CREATE INDEX Idx_Customer_Index_CustomerID ON Sales.Customer_Index(CustomerID)
Nay ta có hai câu lệnh SELECT sau để truy vấn hai bảng:
-- #1
SELECT CustomerID, CustomerType
FROM Sales.Customer_NoIndex
WHERE CustomerID = 11001
-- #2
SELECT CustomerID, CustomerType
FROM Sales.Customer_Index
WHERE CustomerID = 11001
Hai câu lệnh này sẽ cho cùng kết quả, khác biệt duy nhất là câu lệnh thứ hai truy vấn bảng Sales.Customer_Index có index trên trường cần tìm (CustomerID). Ta sẽ xem hai câu lệnh trên được thực hiện như thế nào bằng cách nhìn vào kế hoạch thực thi (execution plan) của chúng. Khi bắt đầu thực hiện một câu lệnh, SQL Server lên một kế hoạch gồm các bước sẽ tiến hành để thực thi câu lệnh đó, gọi là kế hoạch thực thi.Trên hàng công cụ bạn hãy bấm vào nút “Include Actual Execution Plan”. Khi đó, mỗi lần bạn chạy câu lệnh hệ thống sẽ vừa thực hiện câu lệnh vừa đồng thời trả lại kế hoạch thực thi mà nó đã dùng để thực hiện câu lệnh đó.
Bạn hãy bôi đen câu lệnh thứ nhất và thực hiện nó, ở tab “Execution plan” hiện ra kế hoạch thực thi như thế này:
Như vậy ta thấy hệ thống sẽ thực thi câu lệnh bằng cách duyệt qua cả bảng (table scan) và tìm ra các bản ghi thỏa mãn yêu cầu tìm kiếm. Thao tác duyệt bảng có nghĩa là hệ thống cần phải đọc tuần tự từng bản ghi từ đầu đến cuối để tìm ra kết quả. Trong trường hợp này, nó phải đọc toàn bộ 19 185 bản ghi và tìm ra bản ghi có CustomerID=11011. Đây là một thao tác rất chậm vì nó phải xử lý tất cả các bản ghi trong bảng. Nên nhớ hệ thống sẽ không dừng lại khi nó tìm được bản ghi đầu tiên có CustomerID=11011, vì nó không biết liệu còn bản ghi nào khác có giá trị CustomerID tương tự hay không, cho nên để chắc chắn trả lại kết quả đầy đủ hệ thống vẫn phải tiếp tục đọc các bản ghi còn lại. Ta có thể nhận xét thấy chi phí của thao tác duyệt bảng tăng tuyến tính cùng với số lượng bản ghi trong bảng (độ phức tạp là O(n)).
Giờ ta hãy thực hiện câu lệnh thứ hai, lần này kế hoạch thực thi sẽ như sau:
Lần này ta không thấy thao tác table scan nữa, mà thay vào đó là index seek và RID lookup. Index seek là khi hệ thống có thể nhảy đến được node trên cây index chứa khóa thỏa mãn yêu cầu tìm kiếm. Index là một cấu trúc dữ liệu có dạng B-tree, nên nó rất thích hợp với các thao tác tìm kiếm theo kiểu key=value, chỉ cần vài phép so sánh là hệ thống định vị được node chứa khóa cần tìm. Node này chứa khóa (trường được index, ở đây là giá trị của CustomerID) và RID là ID của bản ghi tương ứng trong bảng (đây là giá trị nội bộ chỉ dùng bên trong hệ thống, ta không truy cập được giá trị này). Vì thế bước tiếp theo là dùng RID này để nhảy đến bản ghi tương ứng trong bảng (RID lookup) để lấy các trường dữ liệu cần thiết. Với index seek, độ phức tạp giảm xuống thành O(logn), một bước tiến vượt bậc so với table scan.
Ta có thể so sánh chi phí của hai câu lệnh trên bằng cách thực hiện cả hai cùng nhau:
Ta thấy câu lệnh thứ nhất chiếm tới 95% tổng chi phí, trong khi câu lệnh thứ hai chỉ chiếm có 5%. Nói cách khác, index trên trường CustomerID đã giúp cho câu lệnh thực hiện nhanh lên đến 19 lần. Index đã giúp cho lượng dữ liệu hệ thống cần xử lý để tìm ra kết quả giảm xuống đến mức tối thiểu, và điều đó đã tạo ra bước nhảy về tốc độ. Từ đây ta rút ra một bài học quan trọng: Các trường thường được dùng trong mệnh đề WHERE là các ứng cử viên đầu tiên cần được tạo index.

Thứ Hai, 23 tháng 10, 2017

Kết quả hình ảnh cho fix slow connection
I've found the cause of the issue. The slow connection was because of IPv6 configuration. When I disabled IPv6, everything worked fine.
$ sudo nano /etc/sysctl.conf
Added these configurations at the end of file:
# IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Then restarted sysctl.conf:
$ sudo sysctl -p

Thứ Tư, 20 tháng 9, 2017


Đầu tiên là chúng ta sẽ download thư viện trên mạng về, chú ý là file .zip

Mở chương trình arduino


Chọn file zip --> OK là add thành công, lúc này thì chúng ta có thể dùng thư viện được rồi.

Thứ Năm, 17 tháng 8, 2017

How To Add Additional Hard Disk In Xenserver

To add additional hard disk in xenserver

When a new internal hard drive is installed on a XenServer to work as a new local storage repository, it is not immediately available to the XenServer Console. This article describes how to add an additional hard drive in XenServer.

To Install a hard drive on a XenServer

add-new-hard-drive-as-local-storage-repository-in-XenServer-console-login
add-new-hard-drive-as-local-storage-repository-in-XenServer-console-console-xencenter-server
add-new-hard-drive-as-local-storage-repository-in-XenServer-console-Storage-section

add-new-hard-drive-as-local-storage-repository-in-XenServer-console-Open-Xencenter
add-new-hard-drive-as-local-storage-repository-in-XenServer-console-Switch-On-Xenserver-status-display
















Run the following command to display the installed disks.
[root@xenSR-linuxhelp ~]# fdisk -l

Disk /dev/sda: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sda doesn't contain a valid partition table

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.

Disk /dev/sdb: 42.9 GB, 42949672960 bytes
256 heads, 63 sectors/track, 5201 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1        5202    41943039+  ee  EFI GPT
/dev/sdb1” is my default hard disk. Here my Xenserver take new hard disk as “/dev/sda



To check host uuid

[root@xenSR-linuxhelp ~]# xe host-list
uuid ( RO)                : 1b2265f8-06fb-4980-8415-371e627efefb
          name-label ( RW): xenSR-linuxhelp
    name-description ( RW): Default install of XenServer
Run the following command from the command line interface.
[root@xenSR-linuxhelp ~]# xe sr-create content-type=user device-config:device=/dev/sda host-uuid=1b2265f8-06fb-4980-8415-371e627efefb name-label="local-storage2" shared=false type=ext
4226d65a-e2cf-f7aa-9f30-d828df5b6879
Now, the installed hard drive is visible in the XenServer Console.
add-new-hard-drive-as-local-storage-repository-in-XenServer-console-hard-drive-visible

add-new-hard-drive-as-local-storage-repository-in-XenServer-console-local-storage2

Click “storage” in menu option and check the new hardisk.
Here “local-storage2” is successfully added.


Hướng dẫn có thể áp dụng cho các máy tính chạy hđh ubuntu.

Sau khi logging vào user:
Check ip address của máy tính bằng lệnh:
$ ifconfig


Hiện tại ip của máy tính này được set là 192.168.1.221

Để thay đổi địa chỉ ip ta dùng lệnh sau:

$ sudo nano /etc/network/interfaces

Sẽ thay đổi những giá trị sau đây:


Ở dòng iface ..... inet static là cấp ip tĩnh, phải khai báo thêm các thông số như hình trên.
Trường hợp nếu muốn được cấp phát ip tự động thì thay static = dhcp là máy tính sẽ được cấp phát ip tự động theo lớp mạng nó kết nối vào.

Sau khi thay đổi lưu lại file và restart service.

$ /etc/init.d/networking restart


Chủ Nhật, 30 tháng 7, 2017

Lúc chúng ta truy cập từ localhost thì bình thường, nhưng khi truy cập từ một máy tính khác trong mạng nội bộ thì lại gặp vấn đề như vậy. Mà nó lại hiện cái ngôn ngữ gì cũng không biết nữa. Chỉ biết là có vấn đề với cái file httpd-xampp.conf



Thay đổi file config httpd-xampp.conf

  <Directory "H:/xampp/phpMyAdmin">
  AllowOverride AuthConfig Limit
  Order allow,deny
  Allow from all
  Require all granted
   
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

Thay đổi như thế nào là sẽ vào được.
Sau khi thay đổi xong chúng ta nhớ Stop và Start lại Apache nhé.

Có lẽ rất nhiều bạn trong chúng ta gặp phải vấn đề này khi import các file backup sql lên database, vì mặc định chỉ giới hạn dung lượng là 2,048KiB

Để thay đổi kích thước này ta làm như sau:

Ở đây server của mình cài ứng dụng xampp để chạy.
Đầu tiên chúng ta sẽ vào phần Config của Apache để sửa nội dung.


Tiếp đến chọn php.ini


Tìm đến nội dung upload_max_filesize=2M  và sửa thành dung lượng mình muốn,

Ở đây mình sửa thành 10M và kết quả của mình.


Thứ Bảy, 29 tháng 7, 2017

Bước 1:
Sau khi login với quyền root ta sẽ gõ đường dẫn như sau:
$ nano /etc/network/interfaces

Dĩ nhiên là các bạn sẽ set IP tĩnh theo lớp mạng của mình.
Sau đó Exit file bằng tổ hợp phím Ctrl + X, --> Y để lưu
Sau khi lưu file xong nhớ restart lại service networking bằng lệnh

$ sudo /etc/init.d/networking restart

Sau khi restart xong dùng lệnh ifconfig để xem IP đã thiết lập thành công chưa?


Nếu thiết lập ở máy ảo, thì chọn Option là Briged để bắt cầu qua card mạng đang kết nối được với Internet.
Ở bài viết này mình thiết lập trên máy ảo ubuntu và cài trên phần mềm Virtualbox. Cấu hình Network như sau:


Thứ Ba, 25 tháng 7, 2017

Đầu tiên ta có một bảng dữ liệu được tạo từ excel như hình dưới đây:


Thường thì chúng ta sẽ có sẵn một file excel trước, bước tiếp theo chúng ta sẽ lưu file excel đó dưới dạng .txt Save as type: Unicode Text (*.txt) -- Chọn cái này là vì dữ liệu của chúng ta có chứa các từ Tiếng Việt, nếu không sẽ bị lỗi font


Sau khi lưu  file xong ta sẽ mở bằng notepad nó sẽ như thế này:


và bây giờ chúng ta sẽ lưu file này với định dạng là .csv, chỉ cần Save as đổi đuôi là được. Lưu ý ở phần Encoding chọn UTF-8 vì dữ liệu của chúng ta có Tiếng Việt mà.


Mở file nhanvien.csv mới tạo bằng word


Sau khi mở file ta sẽ thấy các column sẽ cách nhau bởi một tab, mà theo định dạng của mysql thì mỗi phần tử sẽ cách nhau bởi một dấu ','. Hãy chuyển tất cả các tab thành dấu ',', bằng cách Find&Replace thay thế mọi dấu tab (^t) bởi dấu phẩy (,).

Kết quả sẽ được.

Lưu file nhanvien.csv lại
Tiếp theo thì ta sẽ import lên mysql bằng file csv.


Phần column name là các column bên file csv
Và đây là kết quả.

Chủ Nhật, 23 tháng 7, 2017

Khi select trong theme thì bây giờ ứng dụng trong phần layout có title bar (tên của ứng dụng)

Nhưng khi start chương trình lên thì lại không xuất hiện title bar là do nguyên nhân như sau:


Ở phần theme có cấu hình NoActionBar


Vậy lý do cốt lõi là ở đây, và các file được cấu hình ở file AndroidManifest.xml
Chúc các bạn thành công.


Nguyên nhân bị lỗi này là do chúng ta đã xóa giao diện Default của Project. Để thêm trang default chúng ta làm như sau:
Khi bị lỗi này chúng ta thực hiện như sau:
enter image description here
Step 1: Select Edit Configurations
enter image description here
Step 2: Sẽ có cảnh báo watch this warning: Default Activity not found enter image description here
Step 3: select a default activity, lúc này các bạn sẽ chọn lại Default Activity.enter image description here
enter image description here
Step 3: Tiếp đến các bạn sẽ thêm đoạn code này vào file AndroidManifest.xml

<activity
        android:name="com.your.package.name.YourActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
Step 4: Save your changes and finish
enter image description here
Chúc các bạn thành công

Thứ Sáu, 14 tháng 7, 2017


Thủ thuật này sẽ nói rất nhanh thôi các bạn.
Vào cửa sổ lệnh CMD bằng cách nhập cmd vào khung Tìm kiếm của Window
Sau đó ta nhập lệnh: ipconfig
Như hình trên ta sẽ xem được địa chỉ ip của máy tính của chúng ta.

Thủ thuật hướng dẫn các bạn có thể biết được địa chỉ ip máy mình trong local network một cách nhanh nhất.
Có một số cách mà mọi người hay dùng như sau:
Bước 1:

Ở góc phải màn hình, có biểu tượng hình wifi hoặc nếu các bạn dùng mạng dây thì sẽ biểu tượng này.


Bước 2: 
Nhấp chuột phải chọn Open Network and Sharing Center

Bước 3:
Click chuột trái vào Ethernet


Bước 4:
Chọn Details...


Như vậy địa chỉ của máy tính của các bạn ở đây... 192.168.1.22