{"id":10432,"date":"2017-08-09T13:14:19","date_gmt":"2017-08-09T11:14:19","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/"},"modified":"2017-08-09T13:14:19","modified_gmt":"2017-08-09T11:14:19","slug":"sql-server-on-linux-introduction-to-dbfs-experimental-tool","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/","title":{"rendered":"SQL Server on Linux: Introduction to DBFS experimental tool"},"content":{"rendered":"<p>A couple of months ago, Microsoft announced <a href=\"https:\/\/blogs.technet.microsoft.com\/dataplatforminsider\/2017\/05\/17\/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management-views\/\" target=\"_blank\" rel=\"noopener noreferrer\">two additional command line tools<\/a> for SQL Server that are <em>mssql-scripter<\/em> and <em>DBFS<\/em>. The latter has drawn my attention because it exposes live data from SQL Server DMVs as virtual files in a virtual directory on Linux operating system. Microsoft has probably taken another positive step in the SQL Server\u2019s adoption on Linux. Indeed, in a Linux world, we may get Kernel\u2019s performance and configuration data either directly from the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Procfs\"><em>procfs<\/em><\/a> or indirectly by using tools that involve <em>procfs<\/em> in the background.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-18219\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\" alt=\"blog 123 - sqlserver dbfs\" width=\"352\" height=\"192\" \/><\/a><\/p>\n<p>DBFS uses the FUSE filesystem module to expose DMVs and according to <a href=\"https:\/\/blogs.technet.microsoft.com\/dataplatforminsider\/2017\/05\/17\/try-new-sql-server-command-line-tools-to-generate-t-sql-scripts-and-monitor-dynamic-management-views\/\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft blog<\/a>, reading data from each concerned DMV file is a live process that ensures to get always fresh data.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ rpm -qR $(rpm -qa | grep dbfs)\nglibc\nfuse\nfuse-devel\nfreetds\nrpmlib(FileDigests) &lt;= 4.6.0-1\nrpmlib(PayloadFilesHavePrefix) &lt;= 4.0-1\nrpmlib(CompressedFileNames) &lt;= 3.0.4-1\nrpmlib(PayloadIsXz) &lt;= 5.2-1<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">After installing DBFS, let\u2019s start the tool by using the following command line:<\/span><\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql mssql]$ dbfs -m \/var\/opt\/mssql\/dmv -c \/var\/opt\/mssql\/secrets\/dmvtool.conf -v      \n1: Processing entry for section server in configuration file:\nSUCCESSFULLY added entry for server server.<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">The configuration file (-c parameter) stores sensitive information to connect to the SQL Server instance (hostname, user and \u201cinsecure\u201d password). You shall consider to protect this file with suitable permissions.<\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">DBFS is a background process by default but you may change the behavior by using -f parameter at the startup. <\/span><\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql mssql]$ ps -e | grep dbfs\n  2673 ?        00:00:00 dbfs<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">At this stage, the negative point is that to start DBFS manually if the server restarts. I had thought to wrap DBFS in a cron job that will run at the server startup but my preference would be to get the possibility to control DBFS through system as a service. <\/span><\/p>\n<p><span style=\"text-decoration: underline\"><span style=\"color: #000000;font-family: Calibri\">Exploring the DMV mounted filesystem<\/span><\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">In fact, every DMV is exposed in two formats (normal file and JSON file). <\/span><\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ pwd\n\/var\/opt\/mssql\/dmv\/server\n[mikedavem@sql server]$ ls -I \"*.json\" | wc -l\n494<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">DBFS exposes a lot of DMVs as we notice above. We may also want to filter regarding the category plan described in the <\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/relational-databases\/system-dynamic-management-views\/system-dynamic-management-views\"><span style=\"color: #0563c1;font-family: Calibri\">BOL<\/span><\/a><span style=\"color: #000000;font-family: Calibri\"> by using grep. <\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">For instance, AlwaysOn related DMVs \u2026<\/span><\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ ls -I \"*.json\" | grep dm_hadr\ndm_hadr_automatic_seeding\ndm_hadr_auto_page_repair\ndm_hadr_availability_group_states\ndm_hadr_availability_replica_cluster_nodes\ndm_hadr_availability_replica_cluster_states\ndm_hadr_availability_replica_states\ndm_hadr_cluster\ndm_hadr_cluster_members\ndm_hadr_cluster_networks\ndm_hadr_database_replica_cluster_states\ndm_hadr_database_replica_states\ndm_hadr_instance_node_map\ndm_hadr_name_id_map\ndm_hadr_physical_seeding_stats\n\u2026<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">\u2026 or database related DMVs<\/span><\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ ls -I \"*.json\" | grep dm_db\ndm_db_column_store_row_group_operational_stats\ndm_db_column_store_row_group_physical_stats\ndm_db_file_space_usage\ndm_db_fts_index_physical_stats\ndm_db_index_usage_stats\ndm_db_log_space_usage\ndm_db_mirroring_auto_page_repair\ndm_db_mirroring_connections\ndm_db_mirroring_past_actions\ndm_db_missing_index_details\ndm_db_missing_index_groups\ndm_db_missing_index_group_stats\ndm_db_partition_stats\ndm_db_persisted_sku_features\ndm_db_rda_migration_status\ndm_db_rda_schema_update_status\ndm_db_script_level\ndm_db_session_space_usage\ndm_db_task_space_usage \n\u2026<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">The schema name suffix (sys) is not present for DMV related files.<\/span><\/p>\n<p><span style=\"text-decoration: underline\">Extracting data from DMV related files<\/span><\/p>\n<p>Linux provides very powerful tools to consume data from files like <em>tr<\/em>, <em>cut<\/em>, <em>split<\/em>, <em>sort<\/em>, <em>join<\/em>, <em>cat<\/em>, <em>grep<\/em> and <em>awk<\/em> to cite few of them. You may find some examples in <a href=\"https:\/\/github.com\/Microsoft\/dbfs\">Github<\/a> but I decided to get my own experience by attempting to address some usual DBA queries.<\/p>\n<ul>\n<li>Extracting data from <em>sys.dm_os_sys_info<\/em> to retrieve CPU, memory available information on the server as well as the memory manager consumption<\/li>\n<\/ul>\n<p>We may use either <em>cut<\/em> command to extract required columns from the <em>dm_os_sys_info<\/em> file.<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ cut -d$'\\t' -f3,4,5,7,8,9,15,27 dm_os_sys_info\ncpu_count       hyperthread_ratio       physical_memory_kb      committed_kb    committed_target_kb      visible_target_kb       scheduler_count virtual_machine_type_desc\n4       4       3918848 207160  3914240 3914240 4       HYPERVISOR<\/pre>\n<p>But the above output is not very readable and we may want to display the information differently (in column rather than in row). Using <em>awk<\/em> may be your best solution in this case:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ for ((i=1;i&lt;$(cut -d$'\\t' -f3,4,5,7,8,9,15,27 dm_os_sys_info | head -n 1 | wc -w);i++)); do awk '{print $'$i'}' &lt;(cut -d$'\\t' -f3,4,5,7,8,9,15,27 dm_os_sys_info) | tr '\\n' ' ';echo;done | column -t\ncpu_count\t\t\t4\nhyperthread_ratio\t4\nphysical_memory_kb\t3918848\ncommitted_kb\t\t207296\ncommitted_target_kb\t3914240\nvisible_target_kb\t3914240\nscheduler_count\t\t4<\/pre>\n<p>&nbsp;<\/p>\n<ul>\n<li>Extracting information from sys.databases<\/li>\n<\/ul>\n<p>A typical query I may see is to retrieve database information including their name, id, state, recovery model and owner. Basically\u00a0, we have to join two DMVs to get all the requested information: <em>sys.databases<\/em> and <em>sys.server_principals<\/em>. In Linux world, you may also use the <em>join<\/em> command to gather information from different files but it implies to pre-sort each data file first.<\/p>\n<p>But getting the desired output may be challenging. Indeed, firstly we will probably choose the <em>grep<\/em> \/ <em>cut<\/em> tools to extract only rows and columns we want. But using such tools will prevent to keep the column context and getting only column values from the DMV related files may be meaningless in this case as shown below\u00a0:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ join -1 2 -2 3 -t$'\\t' -o 2.1,2.2,2.3,2.4,2.5,1.1 \\\n&lt;(grep -Ev '^[NT|##]|SERVER_ROLE' server_principals | cut -d$'\\t' -f 1,3 | sort -t$'\\t' -k2) \\\n&lt;(cut -d$'\\t' -f 1,2,4,14,22 databases | sort -t$'\\t' -k3) | column -t\nmodel\t\t\t\t3  01  ONLINE  FULL    sa\ntest\t\t\t\t6  01  ONLINE  FULL    sa\nApplixEnterprise\t5  01  ONLINE  SIMPLE  sa\nmaster\t\t\t\t1  01  ONLINE  SIMPLE  sa\nmsdb\t\t\t\t4  01  ONLINE  SIMPLE  sa\ntempdb\t\t\t\t2  01  ONLINE  SIMPLE  sa<\/pre>\n<p>But preserving the column context may become also your concern if you want to sort column data values. Indeed, let\u2019s say you want to sort the above output by the <em>database_id<\/em> column value. You will quickly notice that the header file will be included by the sort operator. Definitely not the result we expect in this case. So, in order to meet our requirement, we may use again the very powerful <em>awk<\/em> command as shown below:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">[mikedavem@sql server]$ join --header -1 2 -2 3 -t$'\\t' -o 2.1,2.2,2.3,2.4,2.5,1.1 \\\n&lt;(head -n1 server_principals | cut -d$'\\t' -f 1,3;grep -Ev '^[NT|##]|SERVER_ROLE' server_principals | cut -d$'\\t' -f 1,3 | sort -t$'\\t' -k2) \\\n&lt;(head -n 1 databases | cut -d$'\\t' -f 1,2,4,14,22;cut -d$'\\t' -f 1,2,4,14,22 databases | sort -t$'\\t' -k3) \\\n| awk 'NR&lt;2{print $0;next}{print $0 | \"sort -k2\"}' | column -t\nname\t\t\t\tdatabase_id  \towner_sid\tstate_desc\trecovery_model_desc\tname\nmaster\t\t\t\t1\t\t\t\t01\t\tONLINE      \tSIMPLE\t\t\t\tsa\ntempdb\t\t\t\t2            \t01\t\tONLINE      \tSIMPLE\t\t\t\tsa\nmodel\t\t\t\t3            \t01\t\tONLINE      \tFULL\t\t\t\tsa\nmsdb\t\t\t\t4            \t01\t\tONLINE      \tSIMPLE\t\t\t\tsa\nApplixEnterprise\t5            \t01\t\tONLINE      \tSIMPLE\t\t\t\tsa\ntest\t\t\t\t6            \t01\t\tONLINE      \tFULL\t\t\t\tsa<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">We finally managed to display the desired output but my feeling is we worked hard for few results and usually we have to deal with more DMVs and complex join than the previous example in the same query. Furthermore, we often have to aggregate data from DMVs to get relevant results and I may easily imagine the additional efforts to produce the corresponding scripts if we extend the scenarios we have to deal with. <\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">There are probably other tools on Linux to make the task easier but my opinion is that DBFS should include the ability to execute custom queries already used by DBAs day-to-day to go beyond the actual capabilities. We didn\u2019t surface JSON format in this blog. This is another way to consume data from DMV related files but in my opinion, it targets more the developers than the DBAs audience. <\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">I noticed that I was not the first and the only one to think about those enhancements by looking at the DBFS Github and the <\/span><a href=\"https:\/\/github.com\/Microsoft\/dbfs\/issues\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"color: #0563c1;font-family: Calibri\">issues<\/span><\/a><span style=\"color: #000000;font-family: Calibri\"> section. Anyway, I like the Microsoft\u2019s initiative to give us the ability to consume DMVs related data from the command line in a Linux world and I\u2019m looking forward the next features about this tool! <\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\"> <span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple of months ago, Microsoft announced two additional command line tools for SQL Server that are mssql-scripter and DBFS. The latter has drawn my attention because it exposes live data from SQL Server DMVs as virtual files in a virtual directory on Linux operating system. Microsoft has probably taken another positive step in the [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":10433,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,99],"tags":[1159,1160,1161,73,1162,1158],"type_dbi":[],"class_list":["post-10432","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","category-sql-server","tag-dbfs","tag-dmv","tag-fuse","tag-linux","tag-profs","tag-sqlserver-2017"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server on Linux: Introduction to DBFS experimental tool<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server on Linux: Introduction to DBFS experimental tool\" \/>\n<meta property=\"og:description\" content=\"A couple of months ago, Microsoft announced two additional command line tools for SQL Server that are mssql-scripter and DBFS. The latter has drawn my attention because it exposes live data from SQL Server DMVs as virtual files in a virtual directory on Linux operating system. Microsoft has probably taken another positive step in the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-08-09T11:14:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"352\" \/>\n\t<meta property=\"og:image:height\" content=\"192\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server on Linux: Introduction to DBFS experimental tool\",\"datePublished\":\"2017-08-09T11:14:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\"},\"wordCount\":856,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\",\"keywords\":[\"DBFS\",\"DMV\",\"Fuse\",\"Linux\",\"profs\",\"sqlserver 2017\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\",\"name\":\"SQL Server on Linux: Introduction to DBFS experimental tool\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\",\"datePublished\":\"2017-08-09T11:14:19+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg\",\"width\":352,\"height\":192},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server on Linux: Introduction to DBFS experimental tool\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server on Linux: Introduction to DBFS experimental tool","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server on Linux: Introduction to DBFS experimental tool","og_description":"A couple of months ago, Microsoft announced two additional command line tools for SQL Server that are mssql-scripter and DBFS. The latter has drawn my attention because it exposes live data from SQL Server DMVs as virtual files in a virtual directory on Linux operating system. Microsoft has probably taken another positive step in the [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/","og_site_name":"dbi Blog","article_published_time":"2017-08-09T11:14:19+00:00","og_image":[{"width":352,"height":192,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server on Linux: Introduction to DBFS experimental tool","datePublished":"2017-08-09T11:14:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/"},"wordCount":856,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg","keywords":["DBFS","DMV","Fuse","Linux","profs","sqlserver 2017"],"articleSection":["Database Administration &amp; Monitoring","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/","name":"SQL Server on Linux: Introduction to DBFS experimental tool","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg","datePublished":"2017-08-09T11:14:19+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-sqlserver-dbfs.jpg","width":352,"height":192},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-on-linux-introduction-to-dbfs-experimental-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server on Linux: Introduction to DBFS experimental tool"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=10432"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10432\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/10433"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=10432"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=10432"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=10432"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=10432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}