Month: August 2020

  • Windows Terminal (2)

    Q: วันก่อนติดตั้ง WSL2 แล้วอยากใช้งาน bash บน Windows Terminal ด้วยทำไง?

    A: กด แล้วเลือก Ubuntu 20.04 ไงล่ะ!!

    Q: ไม่อยากกดเอาแบบเปิดมาแล้วเป็น ubuntu เลยอ่ะ

    A: แก้ Settings คลิก เลือก Settings

    จะเป็นการเปิดการตั้งค่าต่างๆ ด้วย Text Editor ที่ชื่นชอบ

    เลื่อนลงมาดูเรื่อยๆ จะเจอว่ามี Ubuntu-20.04 อยู่

    สนใจบรรทัดที่เขียนว่า “guid”: ให้ copy ข้อความที่อยู่ภายใน “{ }” มาทั้งหมด จากตัวอย่างคือ 07b52e3e-de2c-5db4-bd2d-ba144ed6c273 แล้วให้เลื่อนจอขึ้นไปด้านบนจนเห็นบรรทัดที่มีข้อความว่า “defaultProfile”: แทนที่ข้อความที่อยู่ภายในเครื่องหมาย “{ }” ด้วยข้อความที่ copy ไว้

    เปลี่ยนเป็น

    แล้ว save ปิดแล้วเปิดใหม่ก็จะได้ Ubuntu-20.04 เป็นค่า default

    • จบขอให้สนุก
  • [กันลืม] ปรับแต่ง MySql/Mariadb ให้โหลดข้อมูลได้เร็วขึ้น

    เพื่อให้ดาต้าเบส (Database) ทำงานได้อย่างเต็มประสิทธิภาพและสามารถใช้ทรัพยาการของเครื่องเซิร์ฟเวอร์ (Server) ได้เต็มศักยภาพของเครื่องเมื่อติดตั้งเสร็จก็จะควรมีการปรับแต่งค่าให้เหมาะสมกับการใช้งาน

    • สำหรับ Linux ให้แก้ไขไฟล์ /etc/mysql/my.cnf
    • สำหรับ Windows (XAMPP) ให้แก้ไขไฟล์ C:\xampp\mysql\bin\my.ini

    มาเริ่มกันเลย! ปัจจุบัน MySql/Mariadb เวอร์ชั่นใหม่จะใช้เอนจินแบบ InnoDB เป็นค่าเริ่มต้น ฉะนั้นเราจะโฟกัสความสำคัญเฉพาะการตั้งค่า InnoDB โดยเฉพาะค่า innodb_buffer_pool_size ควรกำหนดให้ไม่เกิน 70-80% ของขนาด RAM มีตัวย่างการค่าคอนเฟิกดังนี้

    (สมมุติสเปกเครื่องเซิร์ฟเวอร์ CPU 4 core  RAM 4 GB)

    # InnoDB Settings
    default_storage_engine          = InnoDB
    innodb_buffer_pool_instances    = 1     # Use 1 instance per 1GB of InnoDB pool size
    innodb_buffer_pool_size         = 1G    # Use up to 70-80% of RAM
    innodb_file_per_table           = 1
    innodb_flush_log_at_trx_commit  = 0
    innodb_flush_method             = O_DIRECT
    innodb_log_buffer_size          = 8M
    innodb_log_file_size            = 256M
    innodb_stats_on_metadata        = 0
    

    คำสั่งคิวรีที่ใช้ตรวจสอบค่าที่เหมาะสมของ innodb_buffer_pool_size

    SELECT CEILING(Total_InnoDB_Bytes*1.6/POWER(1024,3)) RIBPS FROM
    (SELECT SUM(data_length+index_length) Total_InnoDB_Bytes
    FROM information_schema.tables WHERE engine='InnoDB') A;
    

    เมื่อใช้ดาต้าเบสไปได้ 1-2 สัปดาห์ ให้ใช้คำสั่งคิวรีนี้เพื่อใช้ตรวจสอบว่าหน่วยความจำ GB จริงที่ถูกใช้โดย InnoDB Data ใน InnoDB Buffer Pool ในขณะนี้ถูกใช้งานไปเท่าไร

    SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM
    (SELECT variable_value PagesData
    FROM information_schema.global_status
    WHERE variable_name='Innodb_buffer_pool_pages_data') A,
    (SELECT variable_value PageSize
    FROM information_schema.global_status
    WHERE variable_name='Innodb_page_size') B;
    

    และมีค่าอื่นๆ อีกเช่น

    join_buffer_size = 1M
    read_buffer_size = 1M
    sort_buffer_size = 2M
    read_rnd_buffer_size = 1M
    

    เสร็จแล้วให้บักทึก และ Restart การทำงาน MySql/Mariadb ใหม่อีกครั้ง

    แนะนำบทความเพื่อศึกษาเพิ่มเติม : Tuning MySQL : สำรวจตัวเองและเข้าใจตัวแปร

    อ้างอิง

  • [กันลืม] Elasticsearch API พื้นฐาน

    INDEX

    วิธีดูว่ามี index อะไรบ้าง

    GET /_cat

    Response

    =^.^=
    /_cat/allocation
    /_cat/shards
    /_cat/shards/{index}
    /_cat/master
    /_cat/nodes
    /_cat/tasks
    /_cat/indices
    /_cat/indices/{index}
    /_cat/segments
    /_cat/segments/{index}
    /_cat/count
    /_cat/count/{index}
    

    เมื่อทราบว่ามี index อะไรบ้าง ต้องการดูรายละเอียด ใส่ query string parameter (qrs) “v”

    GET /_cat/indices?v

    Response

    health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   logstash-2020.06.20      JeGeb67mSNKN3gCgC9AWCQ   1   1    4573283            0    808.7mb        808.7mb
    yellow open   logstash-2020.05.30      Bg8-hUUAS0m4VbGs0-1lIw   1   1    4124813            0    721.9mb        721.9mb
    yellow open   logstash-2020.05.31      qJX9VbaySG2ssBXMTwmapA   1   1    4333363            0    772.6mb        772.6mb
    yellow open   logstash-2020.06.21      9on104uKQnGllS5QZNyUKg   1   1    4712048            0    869.2mb        869.2mb
    yellow open   logstash-2020.06.22      lVfX4tHjSUeMF640wmIzLw   1   1    8441356            0      1.6gb          1.6gb
    yellow open   logstash-2020.06.01      P_9wbTd7Qo6YNme-NRvFLQ   1   1    7360129            0      1.3gb          1.3gb
    yellow open   logstash-2020.06.23      xvQRTdNHTt2wKfiSlvR87A   1   1    7631987            0      1.4gb          1.4gb
    yellow open   logstash-2020.06.02      H-kPw4FXQ-W1AphBfjtcMw   1   1    7344418            0      1.3gb          1.3gb
    

    ต้องการทราบว่า แต่ละ Fields มีความหมายอย่างไร ใช้ qrs ‘help’

    GET /_cat/indices?help

    Response

    health                           | h                              | current health status                                                                                            
    status                           | s                              | open/close status                                                                                                
    index                            | i,idx                          | index name                                                                                                       
    uuid                             | id,uuid                        | index uuid                                                                                                       
    pri                              | p,shards.primary,shardsPrimary | number of primary shards                                                                                         
    rep                              | r,shards.replica,shardsReplica | number of replica shards                                                                                         
    docs.count                       | dc,docsCount                   | available docs                                                                                                   
    docs.deleted                     | dd,docsDeleted                 | deleted docs                                                                                                     
    creation.date                    | cd                             | index creation date (millisecond value)                                                                          
    creation.date.string             | cds                            | index creation date (as string)                                                                                  
    store.size                       | ss,storeSize                   | store size of primaries & replicas 
    

    ต้องการแสดงเฉพาะบาง Fields ใช้ qrs ‘h=’

    GET /_cat/indices?h=idx,dc,ss&v

    Response

    idx                           dc      ss
    logstash-2020.06.20      4573283 808.7mb
    logstash-2020.05.30      4124813 721.9mb
    logstash-2020.05.31      4333363 772.6mb
    logstash-2020.06.21      4712048 869.2mb
    logstash-2020.06.22      8441356   1.6gb
    logstash-2020.06.23      7631987   1.4gb
    logstash-2020.06.01      7360129   1.3gb
    logstash-2020.06.02      7344418   1.3gb
    logstash-2020.06.24      7300718   1.4gb
    

    ต้องการดูขนาดจัดเก็บ ใช้ qrs ‘bytes=’

    GET /_cat/indices?h=idx,dc,ss&bytes=b&v

    Response

    idx                           dc         ss
    logstash-2020.05.30      4124813  756971768
    logstash-2020.06.20      4573283  848085505
    logstash-2020.05.31      4333363  810175019
    logstash-2020.06.21      4712048  911450929
    logstash-2020.06.22      8441356 1736003983
    logstash-2020.06.01      7360129 1455314526
    logstash-2020.06.23      7631987 1559554324
    logstash-2020.06.24      7300718 1506134380
    logstash-2020.06.02      7344418 1484297643
    logstash-2020.06.25      8409242 1747862513
    logstash-2020.06.03      4424701  860877705
    

    ต้องการเรียงลำดับ ใช้ qrs ‘s=’ และ สามารถกำกับ ‘:desc’, ‘:asc’

    GET /_cat/indices?h=idx,dc,ss&bytes=b&s=ss:desc&v

    ลบ INDEX

    DELETE /kx01

    DOCUMENTS

    Document เป็น JSON ที่มีรายละเอียดเกี่ยวกับการสร้างขึ้นมา เช่น _id, _version และ _source ซึ่ง source หรือ (stored fields)

    create / update if exist

    POST /kx01/_doc/1
    {
      "name": "kanakorn",
      "HN": "1746436"
    }
    

    โดยใน Index เดียวกับ เก็บ Document คนละ Schema กันก็ได้

    POST /kx01/_doc/2
    {
      "HR": "100",
      "RR": "88",
      "age": 10
    }
    

    Check if exist

    HEAD /kx01/_doc/1/

    Response

    200 - OK

    get a source (stored fields)

    GET /kx01/_doc/1/

    Response

    {
      "_index" : "kx01",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "_seq_no" : 0,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "kanakorn",
        "HN" : "1234567"
      }
    }

    get only document value

    GET /kx01/_source/1/

    Response

    {
      "name" : "kanakorn",
      "HN" : "1234567"
    }

    อื่น ๆ

    • Source filtering
      • source_include
      • source_exclude